我正在尝试实现Pointer Input Messages
来替换窗口中的常规鼠标消息。我这样做是为了在我的程序中更好地支持手写笔输入。除了双击外,一切正常。
之前我没有处理指针消息,因此手写笔驱动程序发布的这些指针消息只是传递给DefWindowProc
而DefWindowProc
只生成了像WM_LBUTTONDBLCLK
这样的鼠标输入。
与鼠标消息WM_LBUTTONDBLCLK
不同,没有指针消息会明确告诉您它是双击。我理解他们打算设计一组简洁的消息,并将其他所有内容都放在一个干净的单一结构中。 POINTER_PEN_INFO是包含与当前消息相关的所有信息的结构。我以为我可以在那里找到任何东西,可能还有一些标志表示WM_POINTERDOWN
消息应被视为双击,但也没有任何内容。
我错过了什么吗?如果没有,我还能做些什么来检测双击?我只能找到一些在MSDN上为Window XP编写的过时文档。我在Windows 10上进行编程,使用C ++进行Win32 API编程。
谢谢!
答案 0 :(得分:1)
您可以通过跟踪点击次数并按照与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_CXDOUBLECLICK)
&& abs(ptLastClickPos.y - ptClickPos.y) < GetSystemMetrics(SM_CYDOUBLECLICK))
{
// double-click!
}
else
{
dwLastClickTime = dwClickTime;
ptLastClickPos = ptClickPos;
}
}