在屏幕上旋转矩形

Rotate rectangle on screen

本文关键字:旋转 屏幕      更新时间:2023-10-16

我正在使用GDI+尝试在屏幕上绘制一个矩形并将其旋转45度
这是我正在使用的代码

Pen RedPen(Color(255, 255, 0, 0), 4);
HDC screenDC = GetDC(NULL);
Graphics graphics(screenDC);
graphics.RotateTransform(45);
graphics.DrawRectangle(&RedPen, 150, 150, 50, 50);

矩形会旋转,但它的位置在圆中移动得越多
我很确定这是因为我在旋转屏幕的中心,而不是矩形的中心
那么我该如何围绕矩形的中心旋转它呢?

问题是它没有像您注意到的那样围绕矩形的中心旋转。所以你需要在物体旋转后平移它。

        e->Graphics->RotateTransform(degrees);
        e->Graphics->TranslateTransform(posX, posY, MatrixOrder::Append);
        e->Graphics->DrawRectangle(gcnew Pen( Color::Blue,3.0f ),  -width / 2, -height / 2, width, height);

是要旋转矩形的量posXposY是要在屏幕中绘制的位置。

此外,您还需要确保通过MatrixOrder::Append,否则Transform的顺序可能会更改,这将在旋转之前应用Translation(给您带来与您所看到的类似的效果)