处理WM_POINTER消息时,如何检测双击/点击
How to detect double-click/tap when handling WM_POINTER message?
我正在尝试实现 Pointer Input Messages
以替换窗口中的常规鼠标消息。我这样做是为了更好地支持我程序中的手写笔输入。除了双击。
我以前没有处理指针消息,因此这些由Stylus驱动程序发布的指针消息刚刚传递给DefWindowProc
和DefWindowProc
刚刚生成的鼠标输入,例如WM_LBUTTONDBLCLK
。
与鼠标消息WM_LBUTTONDBLCLK
不同,没有指针消息可以明确地告诉您这是双击。我理解他们设计简洁的消息的意图,并以干净的单个结构制作其他所有内容。pointer_pen_info是包含与当前消息关联的所有信息的结构。我以为我可以在那里找到任何东西,也许有一些标志表明WM_POINTERDOWN
消息应被视为双击,但也没有。
我错过了什么吗?如果没有,我还能做些什么来检测双击?我只能在MSDN上找到一些为Window XP编写的过时文档。我正在Windows 10上编程,Win32 API编程,使用C 编程。
谢谢!
您可以通过跟踪单击并以与Windows的方式相同的方式进行跟踪并将每个点击与最后一个。
进行比较。伪代码:
POINT ptLastClickPos;
DWORD dwLastClickTime;
if (uMsg == WM_POINTERDOWN)
{
DWORD dwClickTime = GetMessageTime();
POINT ptClickPos = { GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam) };
if (dwLastClickTime + GetDoubleClickTime() > dwClickTime
&& abs(ptLastClickPos.x - ptClickPos.x) < GetSystemMetrics(SM_CXDOUBLECLK)
&& abs(ptLastClickPos.y - ptClickPos.y) < GetSystemMetrics(SM_CYDOUBLECLK))
{
// double-click!
}
else
{
dwLastClickTime = dwClickTime;
ptLastClickPos = ptClickPos;
}
}
相关文章:
- 我的程序有一个保存配置文件的GUI,如何双击此配置文件以直接加载带有配置数据的GUI?
- C++,Qt:仅在双击后编辑qtablewidget项目
- 双击更改 mfc 中列表控件中的行的颜色
- C++MFC编辑框处理双击
- 双击滑块手柄时如何发出信号
- C/C++ 检测双击 TVItem 的常用控件
- 在使用 c++ 的 win32 api 中,我想跟踪双击和三次单击等
- 在树状视图中双击后焦点丢失
- MFC功能区主页按钮双击关闭应用程序
- QGraphicsScene 中的 QPushButton 需要双击而不是单击
- 处理WM_POINTER消息时,如何检测双击/点击
- 双击编译C++ Unix 可执行文件不会打开现有文件以从中读取信息
- QListWidget 项目单击和项目双击 - 如果双击,则阻止单击
- 可执行文件无法在双击执行时创建新文件
- OS X 双击速度
- 双击(触摸)按屏幕按钮的原因可能是什么,该按钮通过单击鼠标按下
- 如何区分OpenCV中的点击和双击
- 在Windows中检测全局双击
- 如何在mfc中处理单击和双击同一按钮
- 当用户双击qtablewidget标题时,c++ QT4检测