У меня есть меню в существующем приложении MFC со стандартным главным меню MFC.
Но я хотел бы изменить цвет его фона, чтобы он более органично вписывался в остальную часть приложения.
Первое изображение: главное меню MFC. Приложение окрашено в синий цвет, как видно на панели инструментов, но меню по-прежнему имеет стандартный серый цвет фона.
Второе изображение: меню Spotify, скин, чтобы соответствовать остальным цветам.
Я не нашел примеров ни о чем подобном. Не могли бы вы указать мне, как этого добиться?
Подходы, о которых я думал:
Подкласс CMenu к моему собственному SkinnedMenu, но он создается не нашим кодом, а вызовом
GetMenu()
в классе мейнфрейма, производном отCFrameWnd
. Единственное, что я могу найти здесь, это его сигнатура метода, определенная вafxwin.h
, так как же тогда я могу использовать свое собственное меню подклассов?Удаление всего меню и добавление моих собственных пользовательских кнопок меню в ряд, чтобы оно выглядело как меню. Возможно, это то, что сделали Spotify, так как они также удалили оконную рамку Windows.
Каким-то образом редактирую существующий CMenu, но единственная настройка, которую я могу найти прямо сейчас, это изменение его
MENUINFO
. Например, если я установлюinfo.hbrBack = skin.GetSysColorBrush(COLOR_MENU)
, изменится только цвет фона раскрывающегося списка, а не самого главного меню.Другой :)
CFrameWndEx
, имеет элементCMFCMenubar
для своего меню. И я реализовал тему, написав класс, производный от одного из уже существующих на фреймворке классов MFC Visual Manager. Затем я настроил его, чтобы получить цвета в соответствии с тем, что я притворялся и делалCMFCVisualManager::SetDefaultManager (RUNTIME_CLASS (CMyVisualManager))
, гдеCMyVisualManager
— класс моей темы. - person sergiol   schedule 05.06.2016