Можно ли изменить расположение главного меню верхнего уровня в приложении MFC MDI?

У меня есть приложение с настраиваемой рамкой (например, заголовок/заголовок, границы). Я настроил рамку, удалив стиль WS_CAPTION и переопределив OnNcCalcSize, чтобы зарезервировать область нестандартного размера для подписи, которую приложение рисует в OnNcPaint.

Побочным эффектом является то, что строка меню больше не отображается, и это нормально, потому что я хочу настроить внешний вид и расположение главного меню. К сожалению, я не знаю, как это сделать. Я бы хотел, чтобы меню «Файл» было дальше от левого края, чем со стандартной строкой меню.

Приемлемой альтернативой было бы полное удаление меню и использование OnNcHitTest, OnNcPaint и OnNcMouseMove для управления кодированной вручную заменой меню верхнего уровня.


person Andrew    schedule 13.09.2010    source источник


Ответы (2)


Я никогда не видел способа изменить внешний вид стандартного меню. Вы можете удалить его (удалить код создания из вашего InitInstance), а затем закодировать замену. Я бы не стал делать этого в OnNcXXX, а скорее создал бы новый настраиваемый элемент управления, который вы поместите вверху. Или вы можете взглянуть на тематические меню MFC Next и написать собственный модуль визуализации пользовательского интерфейса. Может быть достаточно переопределить несколько оставшихся функций и прокатиться, чтобы настроить выравнивание меню.

person Roel    schedule 13.09.2010

Это приложение MFC MDI — InitInstance находится не там, где создается меню. Я пытался избавиться от меню (и временно преуспел), но структура MFC, похоже, «возвращает его обратно» - я думаю, что в модели MDI дочерние окна изменяют меню, но код, который это делает, кажется, быть похороненным где-то во фреймворке (иначе я просто не смог найти, где именно это происходит в коде приложения, но я подозреваю, что это происходит внутри кода фреймворка MFC). Если бы я знал, где, я мог бы переопределить методы и взять под свой контроль... Я думаю.

Что может быть причиной для написания пользовательского элемента управления по сравнению с обработкой, например, OnNcMouseMove и OnNcLeftButtonDown? Я не ожидаю, что функциональность понадобится в каком-либо другом приложении (возможно, новое приложение будет написано на C#), поэтому я ищу простоту реализации, а не повторное использование кода.

person Andrew    schedule 15.09.2010