c ++鼠标左键帮助

时间:2010-08-19 23:41:14

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

好的,我知道如何按下鼠标左键(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;

任何想法?

<小时/> 我不会错过休息;
我用teh 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 prudocer

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;
}

4 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

omg这是我的错,我将矢量设置为100个元素对不起家伙

答案 2 :(得分:0)

你确定这个代码在向量中生成了101个条目 - 前面的case(如果有的话)没有丢失break;是不是?

答案 3 :(得分:0)

你从窗口程序中返回什么? WM_LBUTTONDOWN should return 0表示邮件已被处理(如果您没有,则会在处理之前继续收到邮件)。