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