【问题标题】:Win32: How can i set the color of windows Title, Scrollbar etc.?Win32:如何设置窗口标题、滚动条等的颜色?
【发布时间】:2010-01-13 13:07:56
【问题描述】:

我正在用黑色背景上的白色文本更新 Win32 应用程序的 GUI。这对我的内容来说很简单。但是我怎样才能改变我的子窗口(标题栏、滚动条等)的颜色。我知道有WM_CTLCOLORDLG 来设置对话框的颜色。我也知道有WM_NCPAINT,但这会将所有绘画(即滚动条)留给我。我想要的只是设置我选择的颜色。

【问题讨论】:

  • Win32 API 非常倾向于为用户提供她在使用显示控制面板小程序选择首选主题时选择的颜色。是的,您可以自己绘画来强制选择颜色。
  • 标题(标题栏)不是子窗口;它是您窗口的非客户端(WM_NCPAINT 中的 NC)区域的一部分。
  • 我说的是有自己的标题栏的子窗口。该应用程序创建了其中的一些。他们的黑底灰标题与应用程序的其余部分冲突,现在是黑底白字。

标签: c++ user-interface winapi


【解决方案1】:

您可以使用 SetSysColors() 更改窗口标题、边框等的颜色(请参阅http://msdn.microsoft.com/en-us/library/ms724940(VS.85).aspx)。然而,这会改变所有窗口的颜色,而不仅仅是你的,所以这至少是一件不友好的事情。

一种选择是使用 SetSysColors() 在应用程序获得焦点时更改活动窗口标题颜色,并在失去焦点时将其重置为默认值。但我会说这很笨拙,并不真正符合良好做法(假设您的应用程序崩溃了?可能会有一些闪烁)。

WM_NCPAINT 在那里,你可以做这样的事情。这有点痛苦,但也许这会阻止您创建非标准窗口... ;-)

【讨论】:

  • 像这样临时更改系统范围的设置是一种非常非常糟糕的做法。
  • 这就是我所说的。 WM_NCPAINT 是要走的路——或者回到你的设计师那里,让他证明这个决定是正确的。
【解决方案2】:

Hook GetSysColor()(使用 Microsoft Detours 之类的东西)

【讨论】:

    猜你喜欢
    • 2011-03-19
    • 1970-01-01
    • 2018-02-23
    • 1970-01-01
    • 2019-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多