カスタム コントロールで GDI+ と C++ を使用して四角形とパスを描画しています。これが私のコードです...
Gdiplus::RectF myRectF(50.0f, 50.0f, 50.0f, 50.0f);
Gdiplus::Matrix myMatrix(0.0f, 1.0f, 0.0f, 0.0f, 30.0f, 30.0f);
Gdiplus::Graphics gdiGraphics(hDC); // hdC is my Device Context
Gdiplus::Pen* myPen = new Gdiplus::Pen(Gdiplus::Color::White);
myPen->SetWidth(2);
gdiGraphics.TranslateTransform(100.0f, 100.0f, Gdiplus::MatrixOrderAppend);
gdiGraphics.SetTransform(&myMatrix);
gdiGraphics.DrawRectangle(myPen, myRectF);
Gdiplus::GraphicsPath *myPath = new Gdiplus::GraphicsPath();
myPath->AddRectangle(myRectF);
myPath->Transform(&myMatrix);
gdiGraphics.FillPath(new SolidBrush(Color.Green), myPath);
しかし、Rectangle は Path とは異なる場所に描画されます。
両方 (Rectangle と Path) から変換部分を実行しないと、これら 2 つが同じ座標で描画されるため、これら 2 つの変換の動作が異なるのか、間違った API を使用しているのか疑問に思っていました。
パスに描かれた四角形は、本来あるべき正しいものです。