如何删除或隐藏当前文本输出以添加新文本?目前,当他添加另一个文本输出时,文本与文本重叠。我试过使用InvalidateRect(hWnd, NULL, TRUE);,但我看不出有什么不同。
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hdc;
switch (message)
{
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
TextOut(hdc, 5, 5, text.c_str(), _tcslen(_T(text.c_str())));
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
break;
}
return 0;
}发布于 2019-10-07 04:59:03
您对TextOut的调用在您的WM_PAINT处理程序中。这意味着文本将始终绘制在每个WM_PAINT上,这使得您对InvalidateRect的调用实际上毫无用处。
解决这个问题的一种方法是使用一个布尔值(drawText)来指示是否要绘制文本。然后在您的函数中清除文本:
drawText = FALSE;
InvalidateRect(hWnd, NULL, TRUE);在你的WndProc中
case WM_PAINT:
{
hdc = BeginPaint(hWnd, &ps);
if(drawText)
TextOut(hdc, 5, 5, text.c_str(), _tcslen(_T(text.c_str())));
EndPaint(hWnd, &ps);
}
break;发布于 2019-10-09 14:58:23
在本例中,InvalidateRect调用将触发一条WM_PAINT消息,导致再次调用TextOut()。@mnistic的答案是一个很好的解决方案。但我认为你真的应该把TextOut方法放到真正的事件处理(比如OnButtonClickEvent)中,而不是放到WM_PAINT中。
https://stackoverflow.com/questions/58260966
复制相似问题