Как заполняется меню Windows в приложении MFC C++?

Одним из стандартных меню, предоставляемых приложению Document/View в MFC, является меню Windows. Он предоставляет такие элементы, как мозаичное и каскадное окна, и добавляет перечисляемый список доступных в настоящее время видов в конце меню. Проблема, иногда это не так, и я хотел бы знать, почему. Более конкретно, я хотел бы знать, как обновить этот список, поскольку я хотел бы использовать его в инструменте автоматизации графического интерфейса. Обычно список есть, иногда его нет, кто-нибудь знает почему? Я предполагаю, что глубоко внутри класса CFrameWnd есть функция, которая будет следить за этим, но я не могу ее найти.

Изменить: я также использую библиотеку Stingray для графического интерфейса, который может иметь отношение к проблеме.

1 ответ

Решение

Обновление меню и заголовка окна обрабатываются отдельно двумя способами.

  • CFrameWnd::OnUpdateFrameMenu(..) актуализирует только рамочное меню,
  • CFrameWnd::OnUpdateFrameTitle(..) обновляет только название кадра.

Я думаю, что где-то неправильный порядок звонков и обновление заголовка будет позже, чем обновление меню. После всего этого заголовка в меню окна иногда остается пустой строкой.

Самый простой способ починить это с помощью GetActiveFrame()->ActivateFrame() вызов метода. Это немедленно обновит фактическое окно фрейма и собственное меню Window. Его можно использовать после создания CDocument и CView. Лучшее место, чтобы позвонить это в конце OnFileNew, OnFileOpen переопределенные методы класса приложения (CWin)App.

Другие вопросы по тегам