威纳皮 捕获鼠标右键单击

WINAPI Capturing right mouse click

本文关键字:鼠标 右键 单击      更新时间:2023-10-16

我在捕获鼠标点击时遇到问题。我必须案例:

- WM_NCHITTEST那个拖放窗口(捕获点击并按住)

-WM_RBUTTONDOWN 这是一个右键单击的 conext 菜单

我不知道如何将这两者结合起来,以便它们都能正常工作。目前,只有 NCHITEST 有效 - 它需要所有点击。从不输入 RBUTTONDOWN。有什么帮助吗?

case WM_NCHITTEST:  
        {  //Function used from MSDN
            POINT p = { LOWORD(lParam), HIWORD(lParam) };  
            ::ScreenToClient(hWnd, &p);  
            RECT r;  
            GetClientRect(hWnd, &r);  
                return PtInRect(&r, p) ? HTCAPTION : DefWindowProc(hWnd, message, wParam, lParam);  
            }
break;
case WM_RBUTTONDOWN:
    KillTimer(ball, ID_TIMER);
    p.x = LOWORD(lParam);
    p.y = HIWORD(lParam);
    hPopupMenu = CreatePopupMenu();
    ClientToScreen(hWnd, &p);
    AppendMenuW(hPopupMenu, MF_STRING, IDM_EXIT, L"EXIT");
    InsertMenu(hPopupMenu, 0, MF_BYPOSITION | MF_STRING, IDM_EXIT, TEXT("Color Picker"));
    SetForegroundWindow(hWnd);
    TrackPopupMenu(hPopupMenu, TPM_RIGHTBUTTON | TPM_BOTTOMALIGN | TPM_LEFTALIGN, p.x, p.y, 0, hWnd, NULL);
    DestroyMenu(hPopupMenu);
    SetTimer(ball, ID_TIMER, 1, NULL);
    break;

也许你可以处理WM_NCRBUTTONDOWN

case WM_NCRBUTTONDOWN: {
    if(wParam==HTCAPTION) {
        TrackPopupMenu(hMenu,TPM_LEFTALIGN|TPM_RIGHTBUTTON,GET_X_LPARAM(lParam),GET_Y_LPARAM(lParam),0,hWnd,NULL);
    }
    break;
}