Windows   发布时间:2022-05-07  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了winapi – win32 – 如何在文本字符串周围绘制一个矩形?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我是Win32的新手并尝试在C中获取基于GDI的代码(出于技术原因不想使用GDI)

编辑:简化问题:

我需要在窗口中间绘制的文本周围绘制一个矩形.
– 如何填充矩形坐标?
– 任何人都可以帮助线 – 矩形(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);

解决方法

您实际上不必自己将文本居中.如果传递适当的标志,GDI文本输出函数可以为您完成.

例如,如果调用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,请注明来意。
标签:x2y1