閑古鳥

オールドプログラマの日記。プログラミングとか病気(透析)の話とか。

GDI+ を使って座標変換

Graphics g(hDC/*どこかからやってきた DC*/);
Matrix mx;
mx.RotateAt(45, center_point);
g.SetTransform(&mx);

HDC hDC = g.GetHDC();
Rectangle(hDC, rect);
g.ReleaseHDC(hDC);

世の中そんなに甘くないようで、上記のようなコードを書いても回転した矩形は描画されません。これを回転させるには SetWorldTransform API を使用するか、自前で座標変換を行って Polyline 関数を使うよりありません (多分)。

しかしもう sin だの cos だの使うのは面倒くさいので (嫌な思い出があるらしい)、そのくらいはやってもらおうということで以下。

g.GetTransform(&mx);
HDC hDC = g.GetHDC();
Point p = {...}
mx.TransformPoints(p, 5);[]
Polyline(hDC, p, 5);
g.ReleaseHDC(hDC);

ユーティリティとしてもそれなりに使えそうな感じ。