Вопрос

Есть ли способ изменить цвета, используемые простыми меню 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 - это хорошо; это означает, что пользователи могут быть уверены, что в вашем пользовательском интерфейсе есть согласованные элементы, на которые они могут отобразить свой опыт, используя другое программное обеспечение для платформы.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top