有没有办法更改单个进程的纯Win32菜单(背景,文本和高亮显示)使用的颜色,没有使用SetSysColors?

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

有帮助吗?

解决方案

如果我相信你对Rob的评论,它适用于带皮肤的应用程序,具有特殊的外观和感觉。所以走的路可能确实如此,因为费雷克指出(以一种不友好的方式......)使用自己绘制的菜单:你将能够精确定义他们的外观。

其他提示

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); 

我不得不问,为什么?采用常规的Windows外观很好;这意味着用户可以确信您的用户界面中存在一致的元素,他们可以使用其他软件为平台映射他们的体验。

[当然,我可能正在向转换的人讲道,但我想我会说明问题,所以任何读过这个答案的人都不会开始把他们所有的菜单变成天蓝色粉红色'因为它看起来漂亮。]

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top