win32中如何区别“鼠标单击”和 “鼠标双击”
2012-08-24 17:55
686 查看
win32的程序时,遇到了一个问题,那就是在我响应鼠标双击这个事件时,先响应了鼠标单击这个事件。于是下决心解决这个问题。后来才明白,鼠标双击是由两次鼠标的单击组成的,只不过windows通过判断两次鼠标单击的时间,如果两次鼠标单击在200ms之内,则说明是鼠标双击事件,如果超过了200ms,则说明是鼠标的两次单机事件。那么如何在响应鼠标双击的同时不响应鼠标单击事件呢?也就是过滤掉鼠标的单击事件。有两种方法可以实现。
(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就会返回。希望这篇文章能帮助需要的人解决问题。
(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就会返回。希望这篇文章能帮助需要的人解决问题。
相关文章推荐
- win32中如何区别“鼠标单击”和 “鼠标双击”
- Win32控制台程序,ListBox控件响应鼠标单击及双击消息
- MFC学习笔记之:Windows如何区分鼠标双击和两次单击
- js鼠标双击的时候如何屏蔽单击事件呢
- Windows如何区分鼠标双击和两次单击
- Windows/MFC 如何区分鼠标双击和两次单击
- 在SWT中,如何区别鼠标单双击
- (转)MFC:Windows如何区分鼠标双击和两次单击
- 在XP下如何改变鼠标单击打开和双击打开方式
- Windows如何区分鼠标双击和两次单击
- MFC学习笔记之:Windows如何区分鼠标双击和两次单击
- C# 中如何区分鼠标的单击或双击事件
- js 如何避免鼠标单击和双击冲突
- ATOM基础教程一鼠标单击、双击打开文件细节区别(18)
- Windows如何区分鼠标双击和两次单击
- js鼠标单击和双击事件冲突问题的解决方法
- 扩展GridView(六)——数据行响应鼠标的单击和双击事件
- 如何区分单击和双击事件
- 转:java 鼠标单击和双击的控制
- GridView 单击选择行,双击打开详细页面,鼠标移到某行上变色