Ссылка, которую вы опубликовали, показывает единственный надежный способ распознавания сообщений мыши, генерируемых физической мышью, и тех, которые были синтезированы в ответ на прикосновение и ввод пера.
Для полноты здесь код. Код зависит от состояния, которое действует только при обработке сообщения мыши. Вызов его в любое другое время имеет неопределенное поведение:
bool IsTouchEvent() {
const LONG_PTR c_SIGNATURE_MASK = 0xFFFFFF00;
const LONG_PTR c_MOUSEEVENTF_FROMTOUCH = 0xFF515700;
LONG_PTR extraInfo = GetMessageExtraInfo();
return ( ( extraInfo & c_SIGNATURE_MASK ) == c_MOUSEEVENTF_FROMTOUCH );
}
Дополнительные WM_MOUSEMOVE
сообщения, которые вы наблюдаете, являются артефактом того, как система реализует свою внутреннюю бухгалтерскую отчетность. Например, если окно отображается или скрыто, курсор мыши может находиться за другим окном и должен быть пересчитан. Для этого система синтезирует искусственное сообщение WM_MOUSEMOVE
.
Этот эффект объясняется в блоге Raymond Chen: Почему я получаю ложные сообщения WM_MOUSEMOVE? .