【发布时间】:2013-04-16 01:32:36
【问题描述】:
我是 Win32 的新手,并试图在 C++ 中获得基于 GDI 的代码(出于技术原因不想使用 GDI+)
编辑:简化问题:
我需要在窗口中间绘制的文本周围绘制一个矩形。 - 如何填充矩形坐标? - 任何人都可以帮助解决这条线 - Rectangle(x1,y1,x2,y2) 吗? - 如何计算这些 (x1,y1) & (x2,y2) 值?
谢谢你..
hdc = BeginPaint(hWnd, &ps);
GetClientRect(hWnd, &rcClient);
SelectObject(hdc, GetStockObject(DEFAULT_GUI_FONT));
SetTextColor(hdc, RGB(255, 0, 0));
DrawText(hdc, wstring(s.begin(),s.end()).c_str(), -1, &rectResult, DT_SINGLELINE | DT_CALCRECT);
DrawText(hdc, wstring(s.begin(),s.end()).c_str(), -1, &rcClient, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
// Here I need help - How to I place the rectangle around the Text - which is drawn in the middle of the window?
// It looks like need to use - rectResult.bottom/top/left/right - but don't know how..
Rectangle(hdc, 0,0,100,100);
【问题讨论】:
-
GY - 同意这更像是一项家庭作业 - 但对于 win32 编程来说相对较新 - 根据我所读到的 - 需要创建一个基于临时内存的 DC 来计算大小/宽度文本的 - 从这个线程中找到了大部分答案,但不知道如何创建一个临时 DC 来执行这个任务。即使它是被矩形包围的单个文本 - 我可以进一步扩展它 - stackoverflow.com/questions/1835749/win32-text-drawing-puzzle
-
这是我目前拥有的代码的最低版本(对于单个文本): case WM_PAINT: hdc = BeginPaint(hWnd, &ps); GetClientRect(hWnd, &rcClient); SelectObject(hdc, GetStockObject(DEFAULT_GUI_FONT)); SetTextColor(hdc, RGB(255, 0, 0)); DrawText(hdc, wstring(s.begin(),s.end()).c_str(), -1, &rcClient, DT_SINGLELINE | DT_CENTER | DT_VCENTER); // TODO: 在此处添加任何绘图代码... EndPaint(hWnd, &ps);休息;
-
谢谢 G.Y.欣赏链接(其中一个是我想避免的 GDI+)。感谢您或某人是否可以提供代码 sn-p 以在窗口中心绘制一些文本并用矩形包围它 - 要求矩形的原因是 - 它会让我更好地理解关于文本到像素的计算方式,并为我澄清了很多事情。在这个阶段进一步探索......谢谢
-
您可以通过单击问题下方的edit 链接,然后关注our formatting instructions(橙色?图标)来发布代码。与传统论坛不同,Stack Overflow 鼓励您在问题和答案中添加信息,而不是留下一连串的 cmets。