【问题标题】:c++ left mouse button down helpc++ 鼠标左键按下帮助
【发布时间】:2010-08-19 23:41:13
【问题描述】:

好的,我知道如何使用鼠标左键按下 evet(WM_LBUTTONDOWN)。但我遇到了一些麻烦。当它与向量一起使用时,似乎每次按下鼠标左键时都会添加 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;

有什么想法吗?


我没有错过休息时间;
我使用了 size() 函数来告诉我分配了多少元素。
我设置了两个断点一个一个 pRegularShots.push_back(pt);另一个是不同的函数,它将使用向量内部的内容来显示图像。我在那边接到了 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;
    } 
} 

windows 审慎者

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 的 101 次调用,还是向量中只有 101 个元素?
  • 你是否有一个 for(int i; i
  • 你能发布你的整个窗口过程吗?
  • 现在我有了 while 循环,你可以在我的帖子中看到它,我只是编辑它
  • 我发了你可以看看

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


【解决方案1】:

没有任何理由说明当您按下按钮一次时通常会收到很多 WM_LBUTTONDOWN 事件。

也许您之前的@​​987654321@ 部分(处理一些其他消息)缺少break

【讨论】:

    【解决方案2】:

    天哪,这是我的错,我将 vetor 设置为 100 元素对不起,伙计们

    【讨论】:

      【解决方案3】:

      您确定是这段代码生成了向量中的 101 个条目 - 前面的 case(如果有的话)没有缺少 break; 是吗?

      【讨论】:

        【解决方案4】:

        你从窗口过程返回什么? WM_LBUTTONDOWN should return 0 表示该消息已被处理(如果您不这样做,您将继续收到该消息直到它被处理)。

        【讨论】:

          猜你喜欢
          • 2021-10-07
          • 2011-04-26
          • 2011-02-28
          • 2011-06-17
          • 1970-01-01
          • 2011-01-05
          • 1970-01-01
          • 2010-09-27
          • 1970-01-01
          相关资源
          最近更新 更多