How to differ mouse click and drag?
Hi All!
I am having a problem regarding mouse capture. I am capturing mouse
events in my LBUTTONDOWN Handler but i am unable to differ between
click (Mouse down and UP) and drag(Mouse down -> move -> up).
When i am expecting single click windows fires mouse move too. at
first time it runs fine but for subsequent clicks it gives me msg
"Mouse L-Button UP, After Mouse Move.".
What to do now?
Following is my code in which i am capturing mouse events on
LBUTTONDOWN handler.
void CMouseCaptureView::OnLButtonDown(UINT nFlags, CPoint point)
{
CPoint pt;
for (;;)
{
MSG msg;
::GetMessage(&msg,NULL,0,0);
CWnd *pwnd = AfxGetApp()->GetMainWnd();
HWND hwnd = pwnd->GetSafeHwnd();
switch(msg.message)
{
case WM_MOUSEMOVE:
RECT rc;
bMove = TRUE;
pt = msg.lParam ;
GetWindowRect(&rc);
if(PtInRect(&rc,pt))
{
SetTimer(TID_POLLMOUSE,MOUSE_POLL_DELAY,NULL);
if(hwnd != GetCapture()->GetSafeHwnd() )
{
SetCapture();
}
break;
}
break;
case WM_LBUTTONUP:
if(bMove)
{
bMove = FALSE;
AfxMessageBox("Mouse L-Button UP, After Mouse Move.");
}
else
AfxMessageBox("Mouse L-Button UP.");
ReleaseCapture();
KillTimer(TID_POLLMOUSE);
PostMessage(WM_MOUSELEAVE,0,0L);
break;
case WM_TIMER:
GetWindowRect(&rc);
GetCursorPos(&pt);
if(PtInRect(&rc,pt))
{
PostMessage(WM_MOUSEHOVER,0,0L);
break;
}
ReleaseCapture();
KillTimer(TID_POLLMOUSE);
PostMessage(WM_MOUSELEAVE,0,0L);
break;
default:
DispatchMessage(&msg);
}//End of switch
// release the mouse (if we still own it)
if (GetCapture() == this) ::ReleaseCapture();
}//End of For
CView::OnLButtonDown(nFlags, point);
}