我想在用鼠标左键单击窗口的客户区后才显示文本。我有这个代码,但它不起作用。当我点击鼠标左键时没有任何反应:
void Text(HDC hdc)
{
SetTextColor(hdc, RGB(255, 0, 0));
SetBkColor(hdc, RGB(0, 0, 0));
TCHAR display_msg[] = _T("Message in window");
TextOut(hdc, RestartButtonWidth, 10, display_msg, _tcslen(display_msg));
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hdc;
bool Clicked = false;
switch (message)
{
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
if (Clicked == true)
{
Text(hdc);
}
EndPaint(hWnd, &ps);
break;
case WM_LBUTTONDOWN:
Clicked = true;
break;
为什么单击布尔值的状态更改未通过WM_PAINT消息注册?
答案 0 :(得分:1)
每次调用WndProc
时,您都会创建新变量Clicked
。
因此,在WM_LBUTTONDOWN
上,您将该局部变量设置为true
,该变量将在范围的末尾被销毁。在WM_PAINT
事件中,您正在检查新创建的Clicked
变量的状态,该变量的状态为false
。
static bool Clicked = false;
是您的问题的快速解决方案。