Изменение цветов меню Win32 - PullRequest
       8

Изменение цветов меню Win32

3 голосов
/ 18 октября 2008

Есть ли способ изменить цвета, используемые простыми меню Win32 (фон, текст и выделение) для одного процесса, без с использованием SetSysColors?

(SetSysColors вносит глобальные изменения, что плохо, и если вы потерпите крах или забудете снова установить цвета с помощью SetSysColors перед выходом, они не будут восстановлены до выхода из системы.)

Ответы [ 3 ]

10 голосов
/ 18 октября 2008

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); 
3 голосов
/ 18 октября 2008

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

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

2 голосов
/ 20 октября 2008

Если я верю вашему комментарию к Робу, это для приложения с кожурой, с особым внешним видом и ощущением. Таким образом, путь, вероятно, действительно существует, поскольку Ферек указывает (недружественным образом ...) на использование нарисованных владельцем меню: вы сможете точно определить их внешний вид.

...