大佬教程收集整理的这篇文章主要介绍了winapi – win32 – 如何在文本字符串周围绘制一个矩形?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
编辑:简化问题:
我需要在窗口中间绘制的文本周围绘制一个矩形.
– 如何填充矩形坐标?
– 任何人都可以帮助线 – 矩形(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)); DrawText(hdc,wString(s.begin(),s.end()).c_str(),-1,&rectResult,DT_SINGLELINE | DT_CALCRECT); DrawText(hdc,&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,100,100);
例如,如果调用DrawText
并传递DT_CENTER标志,它将自动在指定矩形的中间绘制文本(水平居中).
假设您只有一行文本(听起来像这样),您可以通过传递DT_SINGLELINE和DT_VCENTER标志来自动垂直居中文本.
所以你真正需要做的就是编写代码将your window’s client area分成4个相等的部分,然后将这些矩形传递给DrawText函数.这不是非常困难.如果你无法在头脑中看到它,请将铅笔和纸放在上面.
void PaintWindow(HWND hWnd) { // Set up the device context for drawing. PAINTSTRUCT ps; HDC hDC = BeginPaint(hWnd,&ps); HPEN hpenOld = static_cast<HPEN>(SELEctObject(hDC,GetStockObject(DC_PEN))); HBRUSH hbrushOld = static_cast<HBRUSH>(SELEctObject(hDC,GetStockObject(NULL_BRUSH))); // Calculate the dimensions of the 4 equal rectangles. RECT rcWindow; GetClientRect(hWnd,&rcWindow); RECT rc1,rc2,rc3,rc4; rc1 = rc2 = rc3 = rc4 = rcWindow; rc1.right -= (rcWindow.right - rcWindow.left) / 2; rc1.bottom -= (rcWindow.bottom - rcWindow.top) / 2; rc2.left = rc1.right; rc2.bottom = rc1.bottom; rc3.top = rc1.bottom; rc3.right = rc1.right; rc4.top = rc1.bottom; rc4.left = rc1.right; // Optionally,deflate each of the rectangles by an arbitrary amount so that // they don't butt up right next to each other and we can disTinguish them. InflateRect(&rc1,-5,-5); InflateRect(&rc2,-5); InflateRect(&rc3,-5); InflateRect(&rc4,-5); // Draw (differently-colored) borders around these rectangles. SetDCPenColor(hDC,0)); // red Rectangle(hDC,rc1.left,rc1.top,rc1.right,rc1.bottom); SetDCPenColor(hDC,RGB(0,255,0)); // green Rectangle(hDC,rc2.left,rc2.top,rc2.right,rc2.bottom); SetDCPenColor(hDC,255)); // blue Rectangle(hDC,rc3.left,rc3.top,rc3.right,rc3.bottom); SetDCPenColor(hDC,128,0)); // orange Rectangle(hDC,rc4.left,rc4.top,rc4.right,rc4.bottom); // Draw the text into the center of each of the rectangles. SetBkmode(hDC,TRANSPARENT); SetBkColor(hDC,0)); // black // TODO: Optionally,set a nicer font than the default. DrawText(hDC,TEXT("Hello World!"),&rc1,DT_CENTER | DT_SINGLELINE | DT_VCENTER); DrawText(hDC,&rc2,&rc3,&rc4,DT_CENTER | DT_SINGLELINE | DT_VCENTER); // Clean up after ourselves. SELEctObject(hDC,hpenOld); SELEctObject(hDC,hbrushOld); EndPaint(hWnd,&ps); }
以上是大佬教程为你收集整理的winapi – win32 – 如何在文本字符串周围绘制一个矩形?全部内容,希望文章能够帮你解决winapi – win32 – 如何在文本字符串周围绘制一个矩形?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。