C++鼠标左键按下帮助

标签 c++ events visual-c++ winapi

好的,我知道如何按下鼠标左键 evet(WM_LBUTTONDOWN)。但我遇到了一些麻烦。将它与 vector 一起使用时,每次按下鼠标左键时似乎都会添加 101 个元素。我认为每次按下鼠标按钮时,它都会向 WM_LBUTTONDOWN 发送 101 条消息,导致添加 101 个元素。 这是事件的代码

case WM_LBUTTONDOWN:
    iRegularShots=0;
    pt.x = GET_X_LPARAM(lParam); 
    pt.y = GET_Y_LPARAM(lParam); 
    pRegularShots.push_back(pt); 
    InvalidateRect(hWnd, rect, false); 
    break;

有什么想法吗?


我没有错过休息时间;
我使用 teh size() 函数来告诉我分配了多少元素。
我设置了两个断点一个一个 pRegularShots.push_back(pt);另一个功能不同,它将使用 vector 内部的内容来显示图像。我在那里接到了 101 个电话,但在 pRegularShots.push_back(pt); 上只有一个电话。
这是功能代码

VOID fRegularShot(HDC hdc, HWND hWnd) 
{ 
    Graphics graphics(hdc); 
    Image shot(L"RegularShots.png"); 
    long index=0;
    long s=pRegularShots.size();
    while(index < (long)pRegularShots.size()) 
    { 
        graphics.DrawImage(&shot, pRegularShots[index].x, pRegularShots[index].y); 
        ++index;
    } 
} 

window 专家

switch (message)
    {
    case WM_COMMAND:
        wmId    = LOWORD(wParam);
        wmEvent = HIWORD(wParam);
        // Parse the menu selections:
        switch (wmId)
        {
        case IDM_ABOUT:
            DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
            break;
        case IDM_EXIT:
            DestroyWindow(hWnd);
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
        }
        break;
    case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
        OnPaint(hdc, hWnd, 1);
        if(iRegularShots==0)
        {
            fRegularShot(hdc, hWnd);
        }
        EndPaint(hWnd, &ps);
        break;
    case WM_LBUTTONDOWN:
        iRegularShots=0;
        pt.x = GET_X_LPARAM(lParam); 
        pt.y = GET_Y_LPARAM(lParam); 
        pRegularShots.push_back(pt); 
        InvalidateRect(hWnd, rect, false); 
        return 0;
        break; 
    case WM_LBUTTONUP:
            iRegularShots=1;
            break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}

最佳答案

当您按下按钮一次时,没有任何理由通常会收到大量 WM_LBUTTONDOWN 事件。

也许您之前的 case 部分(处理其他消息)缺少 break

关于C++鼠标左键按下帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3527141/

相关文章:

c++ - 为什么这个循环会产生 "warning: iteration 3u invokes undefined behavior"并输出超过 4 行?

c++ - 示例void_t示例无法使用intel编译器19.0.4进行编译

c# - AddEventHandler 使用反射

visual-studio - 构建成功,但没有创建 .lib 文件

c++ - `std::weak_ptr` 什么时候为空?

c++ - 如何从字符串中存储和检索 char*?

events - 正确的 Google Analytics 事件跟踪语法是什么?

c++ - 如何处理 Qt5 关闭事件以终止?

c++ - 如何从剪贴板中查找所有文件的名称

visual-c++ - MFC:成员变量与控件的资源ID