#windows-7 #mfc #modeless
#windows-7 #mfc #без модуляции
Вопрос:
У меня очень странное поведение на экране с немодальным диалогом, и я не могу найти решение.
Я открываю немодальное диалоговое окно, нажав на кнопку в представлении. Поскольку диалоговое окно не является модальным, я должен иметь возможность нажимать любые другие кнопки в этом представлении во время открытия диалогового окна. Но я не могу. На самом деле я не могу поместить фокус в какой-либо элемент управления .. правки, кнопки и т.д.
Я проверил, какие сообщения получает представление, и, похоже, оно не получает сообщение WM_LBUTTONDOWN. Но он получает сообщение WM_LBUTTONUP.
Чтобы сделать вещи еще более странными, это просто происходит в 64-разрядных версиях Windows 7 (никто не сообщал об этой проблеме в Windows XP и используется в течение длительного времени) и только на некоторых компьютерах. Но я не могу найти причину, и я понятия не имею, почему это происходит на этих компьютерах.
У кого-нибудь есть подсказка? С чего начать поиск?
Спасибо.
Javier
Ответ №1:
это был сложный вопрос. Проблема заключалась в пользовательской реализации диалоговых окон. Они рисуют не клиентскую область с помощью визуальных стилей MFC2008, и при вызове OnNcActivate для visual manager он возвращал FALSE, когда Aero и Desktop Window Manager были активны. Таким образом, диалоговое окно не передавало элемент управления своим дочерним элементам управления.
Довольно сложно, как я уже сказал ….. Я просто сообщаю вам, в чем была проблема, на случай, если у кого-нибудь когда-нибудь возникнет подобная проблема. Я потерял два дня, пытаясь разобраться.
Спасибо.
Javier
Ответ №2:
вы должны иметь дело с WM_NCACTIVATE
неправильным способом. убедитесь, что процедура родительского окна возвращается, TRUE
когда она получает WM_NCACTIVATE
с wparam FALSE
.
Ответ №3:
Это старый вопрос, но для тех, кто приходит сюда в поисках решения своей проблемы: остерегайтесь сообщения WM_MOUSEACTIVATE. Если возвращается либо MA_ACTIVATEANDEAT, либо MA_NOACTIVATEANDEAT, щелчок мыши впоследствии будет проигнорирован.