我使用windows GDI API ExtTextOut函数来绘制这样的文字:
ExtTextOut(hDC, 2000, 2000, 0, &stRect, PrintText, TextOutLen, aiCharCellDistances);
我正在尝试旋转文本,我会旋转文本。但是当我用颜色填充矩形时,我发现矩形没有随文本一起旋转。
有没有办法用文字旋转矩形?或者有更好的方法吗?
P.S。:我的目标是在矩形中绘制文本(如文本区域)并可以任意角度旋转文本,并设置背景颜色,边框线,换行符,右对齐等。
谢谢!
答案 0 :(得分:6)
它不是 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)
。
结果如下:
请注意,在这种情况下, not 需要为您使用的字体指定轮换(根本不是lfRotation
或lfEscapement
)。你只需绘制它就像普通文本一样,世界变换处理所有旋转。