(1) 在WM_LBUTTONDOWN这个消息响应中加入下面的过滤条件
DWORD st;
DWORD et;
MSG msg;
st = GetTickCount();
while(1)
{
if(::PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
::TranslateMessage(&msg);
::DisatchMessage(&msg);}
if(WM_LBUTTONDBLCLK == msg.message)
{
return DefWindowProc(hWnd,message,wParam,lParam);
}
et = GetTickCount();if(et - st > 200)break;}
这样就可以在响应鼠标双击的消息时,不响应鼠标单击的响应。
(2) 使用Sleep(GetDoubleClickTime())在WM_LBUTTONDOWN消息响应中加入
static bool flag = FALSE;
Sleep(GetDoubleClickTime());
if(flag){ return 0;}
flag = false;
然后在WM_LBUTTONDBLCLK中加入
flag = true;
这样的目的是:当用户双击鼠标时,先进入的是WM_LBUTTONDOWN这个消息响应,
Sleep(GetDoubleClickTime())后,
消息响应会进入WM_LBUTTONDBLCLK,这个时候flag变成了true,
等sleep结束后,消息继续回到LBUTTONDOWN中,
这个时候判断flag的值是true就会返回。希望这篇文章能帮助需要的人解决问题。