Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Winapi 在GDI中旋转矩形_Winapi_Gdi - Fatal编程技术网

Winapi 在GDI中旋转矩形

Winapi 在GDI中旋转矩形,winapi,gdi,Winapi,Gdi,我使用windows API ExtTextOut函数绘制如下文本: ExtTextOut(hDC, 2000, 2000, 0, &stRect, PrintText, TextOutLen, aiCharCellDistances); 我正在尝试旋转文本,我确实旋转了文本。但是当我用颜色填充矩形时,我发现矩形没有随着文本旋转 有没有办法用文本旋转矩形?还是有更好的方法 注:我的目标是在矩形中绘制文本(如文本区域),并可以以任何角度旋转它,设置背景颜色、边框线、换行、右对齐等 谢谢

我使用windows API ExtTextOut函数绘制如下文本:

ExtTextOut(hDC, 2000, 2000, 0, &stRect, PrintText, TextOutLen, aiCharCellDistances);
我正在尝试旋转文本,我确实旋转了文本。但是当我用颜色填充矩形时,我发现矩形没有随着文本旋转

有没有办法用文本旋转矩形?还是有更好的方法

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

谢谢

你想要什么还不是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)

结果如下所示:

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


请注意,在这种情况下,您不需要为所使用的字体指定旋转(根本不需要--
lfRotation
lfEscapement
)。您只需像普通文本一样绘制,世界变换处理所有旋转。

谢谢!我添加了更多标记您必须使用GDI吗?这是一个非常古老的API,具有严重的限制。如果你能使用更现代的东西,Direct2D是非常强大的,如果你需要支持旧版本的windows GDI+已经有一段时间了。实际上我现在正在学习Direct2D,我只是希望有一种方法可以回答我的问题使用GDI。谢谢你的建议!在这篇评论之前,我会说我对GDI几乎一无所知,我只是四处看看:-)然而:似乎相关(虽然不是重复):。同时,这也是部分无关的,因为有。我认为在这里加入您使用的代码会对您有所帮助:“但是当我用颜色填充矩形时,我发现矩形没有随文本旋转。”@iRove Hans的答案实际上是用GDI编写的,而不是GDI+:-)结果正是我想要的,谢谢你的回答,我现在正在尝试使用各种解决方案并选择最好的,再次感谢。我对Direct2D非常满意,尽管它至少需要windows 7。