Mfc Mousewheel не вращается текстовое поле, управляемое кнопкой вращения

У меня есть форма заявки MFC, как показано на рисунке:

Ориентация детали

И мне было интересно, почему колесико мыши работало на поле «Базовый угол:» (для управления управлением вращением), а не на полях «Угол» и «Диапазон». Нажатие непосредственно на кнопки прокрутки работало отлично.

То же самое происходило с полями «Базовый угол» и «±» формы Nesting:

Вложение

Моя гипотеза: это происходит потому, что поля находятся внутри группового ящика

Что я сделал для проверки: я изменил размеры группового поля в teo froms таким образом, чтобы нерабочие поля не перекрывали его:

Изменена ориентация детали

Вложенность изменена

Результаты: Колесико мыши начало работать на элементах управления диалогового окна «Ориентация детали». Но в диалоге Nesting он продолжал отказываться работать.

Примечания: текстовые поля являются CEdits. Они DDX с переменными CString. Ориентация детали — это модальный диалог. Вложение — это форма внутри CMFCTabControl, внутри CDialogBar, внутри CDockablePane, внутри CMainFrame (это производное от CFrameWndEx)

Теперь мои подозрения: для диалогового окна ориентации детали формы я подозреваю, что групповой блок использует событие колесика мыши. Что касается диалогового окна вложения, я подозреваю, что DockablePane использует событие колесика мыши. Или, может быть, неявная панель CTabbed, созданная макетом панелей, который я разработал; или даже мейнфрейм.

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

Есть ли способ сделать так, чтобы движение колесика мыши обрабатывалось тем, кто должен это делать? Тот же вопрос относится к элементам управления формой вложения, какая область группового поля была удалена, а колесо мыши по-прежнему не заставляло вращающуюся кнопку двигаться!

Заранее спасибо, Серхио


person sergiol    schedule 02.04.2013    source источник


Ответы (1)


Первым шагом было отключение небольшого программного обеспечения, которое я здесь назвал WizMouse. Колесо мыши стало работать сразу в текстовых полях диалогового окна ориентации детали, управляемых счетчиком.

Чтобы заставить другие работать, мне пришлось изменить определение спиннера RC с

UDS_ARROWKEYS

to

UDS_SETBUDDYINT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS | UDS_HOTTRACK

Это заставляло колесико мыши двигаться, но нежелательным образом: оно двигалось на одну единицу, движение вверх уменьшалось, и его верхний предел был равен 100!

Почему? Потому что у меня есть функция для обработки UDN_DELTAPOS для управления смещением счетчика. Он определяет пошаговое значение как двойное с дельтой 5,0. И это происходило также при прямом нажатии на две кнопки счетчика!

В этой функции все, что мне нужно было сделать, это установить *pResult в 1 вместо 0.

Теперь все работает нормально :)

Спасибо, еще раз.

person sergiol    schedule 05.04.2013