单击鼠标左键后显示文本

时间:2017-12-01 14:46:09

标签: c++

我想在用鼠标左键单击窗口的客户区后才显示文本。我有这个代码,但它不起作用。当我点击鼠标左键时没有任何反应:

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消息注册?

1 个答案:

答案 0 :(得分:1)

每次调用WndProc时,您都会创建新变量Clicked。 因此,在WM_LBUTTONDOWN上,您将该局部变量设置为true,该变量将在范围的末尾被销毁。在WM_PAINT事件中,您正在检查新创建的Clicked变量的状态,该变量的状态为false

static bool Clicked = false;

是您的问题的快速解决方案。