Reputation: 528
i have a problem with capturing mouse clicks. I have to cases:
-WM_NCHITTEST that Drag and Drop window (capture click&hold)
and
-WM_RBUTTONDOWN which is a rightclick conext menu
I have no idea how to combine those two so that they both could work properly. For now, only NCHITEST works - it takes all the clicks. RBUTTONDOWN is never entered. Any help with that?
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;
Upvotes: 0
Views: 1386
Reputation: 307
Maybe you can handle 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;
}
Upvotes: 1