有没有一种方法可以为单个进程更改纯Win32菜单使用的颜色(背景、文本和突出显示),而不使用SetSysColors?
(SetSysColors会进行全局更改,这是不好的,如果您在退出之前崩溃或忘记使用SetSysColors再次设置颜色,则它们将不会恢复直到您注销。)
(SetSysColors会进行全局更改,这是不好的,如果您在退出之前崩溃或忘记使用SetSysColors再次设置颜色,则它们将不会恢复直到您注销。)
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);