我在Win32程序中使用DrawText函数在屏幕顶部中央显示“Local”,在中心显示“Server”。当我运行程序时,它显示“本地”但不显示“服务器”。这是我的消息循环中的代码:
case WM_PAINT:
{
RECT localLabel;
localLabel.left = 0;
localLabel.top = 0;
localLabel.right = 270;
localLabel.bottom = 20;
PAINTSTRUCT localPs;
HDC localHandle = BeginPaint(hwnd, &localPs);
DrawText(localHandle, "Local", -1, &localLabel, DT_CENTER);
EndPaint(hwnd, &localPs);
PAINTSTRUCT serverPs;
RECT serverLabel;
serverLabel.left = 0;
serverLabel.top = 100;
serverLabel.right = 270;
serverLabel.bottom = 20;
HDC serverHandle = BeginPaint(hwnd, &serverPs);
DrawText(serverHandle, "Server", -1, &serverLabel, DT_CENTER);
EndPaint(hwnd, &serverPs);
}
break;
我尝试使用相同的PAINTSTRUCT,但没有帮助。我尝试使用相同的HDC,但这也没有帮助。如何在屏幕上显示两者?
感谢。
答案 0 :(得分:2)
您的第二个矩形无效(bottom
应该是120
而不是20
,因为它是实际的底部坐标,而不是高度。此外,您必须在调用EndPaint()
之前呈现两个字符串:
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd, &ps);
RECT localLabel;
localLabel.left = 0;
localLabel.top = 0;
localLabel.right = 270;
localLabel.bottom = 20;
DrawText(hdc, "Local", -1, &localLabel, DT_CENTER);
RECT serverLabel;
serverLabel.left = 0;
serverLabel.top = 100;
serverLabel.right = 270;
serverLabel.bottom = 120;
DrawText(hdc, "Server", -1, &serverLabel, DT_CENTER);
EndPaint(hwnd, &ps);
最后,除此之外,您可能不希望将所有代码留在窗口过程的case
语句中。考虑将其移入自己的功能以提高可读性(和可维护性)。
答案 1 :(得分:2)
首先,您的bottom
坐标超过了top
坐标,这是故意的吗?
然后,您应该为您收到的每个BeginPaint
致电EndPaint
/ WM_PAINT
一次。它通常是这样的:
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC localHandle = BeginPaint(hwnd, &ps);
// do *all* the drawing
EndPaint(hwnd, &ps);
}
break;
答案 2 :(得分:0)
“bottom”就是那个,rect的底部。你正在使用它,好像它是高度。
serverLabel.bottom = serverLabel.top + 20;
答案 3 :(得分:0)
我觉得serverLabel.bottom = 20;应该是serverLabel.bottom = 120 ;