Windows CWnd :: OnLButtonDown не вызывается, как ожидалось, при двойном щелчке - PullRequest
2 голосов
/ 01 ноября 2009

Я разрабатываю интерактивное приложение MFC, которое отображает трехмерный объект, используя мой собственный алгоритм, по сути, используя MFC в качестве платформы, но используя множество вызовов pDC->Polygon(), pDC->Rectangle(), pDC->DrawText() и т. Д.

Пользовательский интерфейс имеет множество интерактивных областей, которые хорошо работают. Однако экранные элементы управления вращением, вращением и т. Д. 3D-изображения побуждают пользователей к двойному щелчку, тройному щелчку и так далее.

Я на 99% уверен, что CWnd::OnLButtonDown() не вызывается до тех пор, пока Windows (или что-то еще) не решит, что операция - это не двойной щелчок или двойной щелчок, а только один раз. Это серия кликов приводит к уведомлению каждый второй клик. Пользовательский опыт заикается вращением. Временное решение состоит в том, чтобы пользователи слегка перемещали мышь между щелчками мыши - это решает проблему, но довольно недружелюбно.

Приложение не перехватывает событие двойного щелчка. Может быть, есть способ пойти дальше, чтобы отключить обработку двойного клика? Или, может быть, есть способ низкоуровневого захвата кнопки мыши вниз?

Ответы [ 2 ]

2 голосов
/ 01 ноября 2009

Я думаю, что у вас это задом наперед - первый клик проходит как WM_LBUTTONDOWN, второй - двойным щелчком.

Чтобы окно не генерировало сообщения WM_LBUTTONDBLCLK, удалите стиль CS_DBLCLKS из окна.

Все это объясняется в WM_LBUTTONDBLCLK документации.

Редактировать: Я ошибся, CS_DBLCLKS - это стиль класса, а не стиль окна. Я не думаю, что вы можете удалить его, вы должны создать новый класс окна, который не включает его. Он предоставлен МФЦ - см. Эту страницу http://msdn.microsoft.com/en-us/library/a77269ff(VS.80).aspx.

1 голос
/ 18 сентября 2015

Просто чтобы добавить ответ, этот метод работал для меня:

    WORD dwStyle = GetClassLongPtr(handle, GCL_STYLE);
    dwStyle &= ~CS_DBLCLKS;
    SetClassLongPtr(handle, GCL_STYLE, dwStyle);

Вы можете использовать эти функции для редактирования структуры стиля WNDCLASSEX для конкретного окна, удаляя событие двойного щелчка и исправляя поведение одиночного щелчка.

GetClassLongPtr
SetClassLongPtr

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...