Как заполняется меню Windows в приложении MFC C ++? - PullRequest
0 голосов
/ 11 марта 2010

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

Edit: Я также использую библиотеку Stingray дляGUI, который вполне может иметь отношение к проблеме.

1 Ответ

1 голос
/ 27 января 2011

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

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

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

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

...