Проблема в том, что всякий раз, когда пользователь дважды щелкает, отправляются четыре сообщения:
WM_LBUTTONDOWN
WM_LBUTTONUP
WM_LBUTTONDBLCLK
WM_LBUTTONUP
Это происходит только в том случае, если пользователь нажимает второй раз в течение «времени двойного щелчка» (используйте ::GetDoubleClickTime()
, чтобы получить его).
Итак, что вы можете сделать, это установить таймер (со значением времени ожидания, равным времени двойного щелчка), когда пользователь впервые щелкает, и если второй щелчок происходит до того, как таймер выключается, у вас есть двойной щелчок, и вы можете игнорировать сообщение кнопки вверх.
Если таймер отключается, вы вызываете обработчик кнопок.
Этот метод имеет недостаток, заключающийся в том, что он немного задерживает реакцию на «Button Up» или одиночный щелчок, в зависимости от того, как вы это делаете, но нет простого способа отбросить только сообщения Button Up при двойном щелчке.
EDIT:
Если вы просто хотите сбросить второй WM_LBUTTONUP, вы можете использовать флаг. Вы устанавливаете его, когда получаете WM_LBUTTONDBLCLK. Затем в обработчике для WM_LBUTTONUP вы ничего не делаете, если он установлен (и затем, конечно, очищаете его).