代码之家  ›  专栏  ›  技术社区  ›  CesarB

更改Win32菜单颜色

  •  3
  • CesarB  · 技术社区  · 16 年前

    是否有方法为单个进程更改纯Win32菜单(背景、文本和突出显示)使用的颜色, 没有 使用SetSysColors?

    (SetSysColors进行全局更改,这很糟糕,如果在退出前崩溃或忘记用SetSysColors重新设置颜色,则在注销之前不会还原这些颜色。)

    3 回复  |  直到 16 年前
        1
  •  2
  •   PhiLho    16 年前

    如果我相信你对Rob的评论,那是为了一个皮肤光滑的应用程序,有着特殊的外观和感觉。因此,正如费雷克所指出的(以一种不友好的方式…)使用业主绘制的菜单:你将能够精确地定义它们的外观。

        2
  •  10
  •   Serge Wautier    16 年前

    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); 
    
        3
  •  3
  •   Rob    16 年前

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

    [当然,我可能是在向皈依者宣讲,但我想我会说明这一点的,所以任何读到答案的人都不会把他们所有的菜单都变成天蓝色的粉红色,因为看起来很漂亮。]