Как заполняется меню Windows в приложении MFC C++?
Одним из стандартных меню, предоставляемых приложению Document/View в MFC, является меню Windows. Он предоставляет такие элементы, как мозаичное и каскадное окна, и добавляет перечисляемый список доступных в настоящее время видов в конце меню. Проблема, иногда это не так, и я хотел бы знать, почему. Более конкретно, я хотел бы знать, как обновить этот список, поскольку я хотел бы использовать его в инструменте автоматизации графического интерфейса. Обычно список есть, иногда его нет, кто-нибудь знает почему? Я предполагаю, что глубоко внутри класса CFrameWnd есть функция, которая будет следить за этим, но я не могу ее найти.
Изменить: я также использую библиотеку Stingray для графического интерфейса, который может иметь отношение к проблеме.
1 ответ
Обновление меню и заголовка окна обрабатываются отдельно двумя способами.
CFrameWnd::OnUpdateFrameMenu(..)
актуализирует только рамочное меню,CFrameWnd::OnUpdateFrameTitle(..)
обновляет только название кадра.
Я думаю, что где-то неправильный порядок звонков и обновление заголовка будет позже, чем обновление меню. После всего этого заголовка в меню окна иногда остается пустой строкой.
Самый простой способ починить это с помощью GetActiveFrame()->ActivateFrame()
вызов метода. Это немедленно обновит фактическое окно фрейма и собственное меню Window. Его можно использовать после создания CDocument и CView. Лучшее место, чтобы позвонить это в конце OnFileNew
, OnFileOpen
переопределенные методы класса приложения (CWin)App.