Я инициализирую представление своего приложения MFC с помощью этой строки:
CSingleDocTemplate pDocTemplate(
new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CMyDoc),
RUNTIME_CLASS(CMainFrame),
RUNTIME_CLASS(CMyDataView)
)
);
AddDocTemplate(pDocTemplate);
IDR_MAINFRAME — это идентификатор моего главного меню. Каков наилучший способ сделать это меню настраиваемым? У меня уже есть класс, производный от CMenu, который отлично справляется с контекстным меню. Разница в том, что свои контекстные меню я создаю сам, а это меню создает фреймворк.
Чтобы перезаписать главное меню, я попытался:
customMenu.LoadMenu(IDR_MAINFRAME);
customMenu.ChangeToOwnerDraw(customMenu, *m_MenuProperties);
m_pMainWnd->SetMenu(&customMenu);
, но каким-то образом для первых элементов (которые являются всплывающими окнами) MeasureItem не запускается в экземпляре класса customMenu, в результате чего появляется крошечный квадрат, на который нужно щелкнуть, и текст разных кнопок, перекрывающих друг друга.
MENUITEM отображаются, как и ожидалось, но для каждого POPUP в подменю (а также в подпод- и подподподменю) неправильный стиль (читай: MeasureItem не вызывается). Для MENUITEMS в подменю, подподменю и подподподменю я получаю вызов MeasureItem из фреймворка.
CMainFrame
? Если этоCFrameWndEx
|CMDIFrameWndEx
, а вы используетеCMFCMenubar
, скорее всего, вы не будете работать так, как хотите, поскольку обычное поведение меню переопределяется пакетом функций MFC. - person sergiol   schedule 05.09.2017