Как обнаружить двойной щелчок / нажатие при обработке сообщения WM_POINTER?

Я пытаюсь реализовать Pointer Input Messages заменить обычное сообщение мыши в окне. Я делаю это для лучшей поддержки ввода стилуса в моей программе. Все отлично работает, кроме двойного щелчка.

Я не обрабатывал сообщение-указатель раньше, поэтому эти сообщения-указатели, отправленные драйвером стилуса, были просто переданы DefWindowProc а также DefWindowProc только что сгенерированный ввод мышью, как WM_LBUTTONDBLCLK,

В отличие от сообщения мыши WM_LBUTTONDBLCLKНет указателя, который бы явно указывал, что это двойной щелчок. Я понимаю их намерение разработать краткую группу сообщений и сделать все остальное в единой чистой структуре. POINTER_PEN_INFO это та структура, которая содержит всю информацию, связанную с текущим сообщением. Я думал, что могу найти что-нибудь там, возможно, некоторые флаги, чтобы указать, что WM_POINTERDOWN сообщение следует рассматривать как двойной щелчок, но там тоже ничего нет.

Я что-то пропустил? Если нет, что еще я могу сделать, чтобы обнаружить двойной щелчок? Я мог найти только некоторые устаревшие документы, которые были написаны для Windows XP на MSDN. Я программирую на Windows 10, Win32 API программирую на C ++.

Спасибо!

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;
}
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]