更改Win32菜单颜色

Ces*_*arB 3 winapi menu colors

有没有办法在使用SetSysColors的情况下为单个进程更改普通Win32菜单(背景,文本和高亮显示)使用的颜色?

(SetSysColors执行全局更改,这很糟糕,如果您在退出之前崩溃或忘记再次使用SetSysColors设置颜色,则在您注销之前不会恢复它们.)

Ser*_*ier 10

SetMenuInfo()API是你的朋友.它允许您应用任何画笔来绘制菜单的背景.

这些方面的东西可以解决你的问题:

MENUINFO mi = { 0 }; 
mi.cbSize = sizeof(mi); 
mi.fMask = MIM_BACKGROUND|MIM_APPLYTOSUBMENUS; 
mi.hbrBack = hBrush; 

HMENU hMenu = ::GetMenu(hWnd); 
SetMenuInfo(hMenu, &mi); 
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,这只能解决部分问题。如果用户已经更改了默认的前景色,或者您确实想要更改前景色,则在不设置前景色的情况下设置背景色是一个坏主意。 (2认同)

Phi*_*Lho 4

如果我相信你对 Rob 的评论,那是针对皮肤应用程序,具有特殊的外观和感觉。因此,正如费雷克指出的那样(以一种不友好的方式......),正确的方法可能是使用所有者绘制的菜单:您将能够精确地定义它们的外观。