c++ - 如何清除 TextOut?
问题描述
如何删除或隐藏当前文本以添加新文本?目前,当他添加另一个文本输出时,文本与文本重叠。我尝试使用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;
}
解决方案
您的呼叫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;
推荐阅读
- dart - 在 tabbar 的页面之间处理状态
- android - Android Studio 和 OpenCV “编译错误”、“无法解析可样式化的符号”
- wpf - 如何在 WPF 的单列中绘制多个“堆栈”
- c# - 检查绝对uri是否包含给定相对uri的最佳方法
- javascript - Using Async/Await with Fetch in a JavaScript map function not executing in order
- c# - How can I use PlayerPrefs to save the color values of the object?
- javascript - 删除 1 行或多行后如何显示总行数然后显示总行数?
- c++ - A* 算法似乎在循环运行,我做错了什么?
- sql-server - PostgreSQL bytea to Base64 like SQL Server
- asp.net-core - 如何绑定没有 Content-Type Web API .Net core 2.1 的 POST 请求?