Изменение цветов меню Win32
Вопрос
Есть ли способ изменить цвета, используемые простыми меню Win32 (фон, текст и подсветка) для одного процесса, без с использованием SetSysColors?
(SetSysColors выполняет глобальное изменение, что плохо, и если вы потерпите крах или забудете снова установить цвета с помощью SetSysColors перед выходом, они не будут восстановлены, пока вы не выйдете из системы.)
Решение
Если я верю вашему комментарию к Робу, это приложение с кожурой, с особым внешним видом и ощущением. Таким образом, путь, вероятно, действительно существует, поскольку Ферек указывает (недружественным образом ...) на использование нарисованных владельцем меню: вы сможете точно определить их внешний вид.
Другие советы
API SetMenuInfo () - ваш друг. Это позволяет вам применять любую кисть для рисования фона вашего меню.
Что-то в этом духе должно решить вашу проблему:
MENUINFO mi = { 0 };
mi.cbSize = sizeof(mi);
mi.fMask = MIM_BACKGROUND|MIM_APPLYTOSUBMENUS;
mi.hbrBack = hBrush;
HMENU hMenu = ::GetMenu(hWnd);
SetMenuInfo(hMenu, &mi);
Я должен спросить, почему? Принятие обычного внешнего вида Windows - это хорошо; это означает, что пользователи могут быть уверены, что в вашем пользовательском интерфейсе есть согласованные элементы, на которые они могут отобразить свой опыт, используя другое программное обеспечение для платформы.
[Я, наверное, проповедую новообращенным, конечно, но я подумал, что пойму, чтобы каждый, кто читает ответ на этот вопрос, не стал делать все свои меню небесно-голубо-розовыми, потому что это выглядит довольно.]