Я пытаюсь реализовать Pointer Input Messages
заменить обычное сообщение мыши в окне. Я делаю это для лучшей поддержки ввода стилуса в моей программе. Все отлично работает, кроме двойного щелчка.
Я не обрабатывал сообщение-указатель раньше, поэтому эти сообщения-указатели, отправленные драйвером стилуса, были просто переданы DefWindowProc
а также DefWindowProc
только что сгенерированный ввод мышью, как WM_LBUTTONDBLCLK
,
В отличие от сообщения мыши WM_LBUTTONDBLCLK
Нет указателя, который бы явно указывал, что это двойной щелчок. Я понимаю их намерение разработать краткую группу сообщений и сделать все остальное в единой чистой структуре. POINTER_PEN_INFO это та структура, которая содержит всю информацию, связанную с текущим сообщением. Я думал, что могу найти что-нибудь там, возможно, некоторые флаги, чтобы указать, что WM_POINTERDOWN
сообщение следует рассматривать как двойной щелчок, но там тоже ничего нет.
Я что-то пропустил? Если нет, что еще я могу сделать, чтобы обнаружить двойной щелчок? Я мог найти только некоторые устаревшие документы, которые были написаны для Windows XP на MSDN. Я программирую на 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_CXDOUBLECLICK)
&& abs(ptLastClickPos.y - ptClickPos.y) < GetSystemMetrics(SM_CYDOUBLECLICK))
{
// double-click!
}
else
{
dwLastClickTime = dwClickTime;
ptLastClickPos = ptClickPos;
}
}
Других решений пока нет …