gpt4 book ai didi

winapi - 在 GDI 中旋转矩形

转载 作者:行者123 更新时间:2023-12-02 15:18:53 27 4
gpt4 key购买 nike

我正在使用 Windows GDI API ExtTextOut 函数来绘制这样的文本:

ExtTextOut(hDC, 2000, 2000, 0, &stRect, PrintText, TextOutLen, aiCharCellDistances);

我正在尝试旋转文本,我确实旋转了文本。但是当我用颜色填充矩形时,我发现矩形并没有随着文本旋转。

有没有什么办法可以旋转带有文字的矩形?或者有更好的方法吗?

P.S.: 我的目标是在矩形(如文本区域)中绘制文本并可以任意角度旋转,并设置背景颜色、边框线、换行符、右对齐等。

谢谢!

最佳答案

100% 不清楚您想要什么,但我认为您想绘制一些以相同角度旋转的文本和矩形?如果是这样,最简单的方法可能是使用 SetWorldTransform 来完成这项工作。

下面是一些使用 MFC 实现的代码:

double factor = (2.0f * 3.1416f)/360.0f;
double rot = 45.0f * factor;

// Create a matrix for the transform we want (read the docs for details)
XFORM xfm = { 0.0f };
xfm.eM11 = (float)cos(rot);
xfm.eM12 = (float)sin(rot);
xfm.eM21 = (float)-sin(rot);
xfm.eM22 = (float)cos(rot);

pDC->SetGraphicsMode(GM_ADVANCED);
pDC->SetWorldTransform(&xfm); // Tell Windows to use that transform matrix

pDC->SetBkMode(TRANSPARENT);
CRect rect{ 290, 190, 450, 230 };
CBrush red;
red.CreateSolidBrush(RGB(255, 0, 0));

pDC->FillRect(rect, &red); // Draw a red rectangle behind the text

pDC->TextOut(300, 200, L"This is a string"); // And draw the text at the same angle

在大多数情况下,在没有 MFC 的情况下执行此操作仅意味着将 pDC->foo(args) 更改为 foo(dc, args)

结果是这样的:

enter image description here

请注意,在这种情况下,您不需要为字体指定旋转(完全是 lfRotationlfEscapement)你用。您只需像普通文本一样进行绘制,世界变换会处理所有旋转。

关于winapi - 在 GDI 中旋转矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38757823/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com