【问题标题】:Get default Windows System Colors in .NET在 .NET 中获取默认的 Windows 系统颜色
【发布时间】:2014-09-01 10:19:08
【问题描述】:

我正在编写一个自定义 Button 控件,作为(即将推出的)免费控件套件的一部分,并且我希望将我的(默认)控件颜色基于相应的 Windows 系统颜色。因此,在线查找“默认 Windows 系统颜色”后,我找不到有关 Windows 控件(尤其是按钮控件)的系统颜色的信息。

有没有办法在 .NET 中获取此颜色信息(例如按钮边框颜色、按钮突出显示颜色、按钮悬停颜色、按钮单击背景颜色等)?

【问题讨论】:

  • 查看SystemColors类中的属性
  • 请注意,SystemColors 主要对应于“经典 Windows”外观中看到的颜色元素 - 自 Windows 8 起已停止使用。另请注意,没有直接的方法可以获取当前的 Aero Glass / Window Color没有 P/Invoke 的 .NET Framework。我认为当前的时尚趋势是不允许用户以这种方式自定义他们的环境。
  • @Dai:我完全同意(我眼里含着泪水),“当前的时尚趋势是不允许用户自定义他们的环境”——这应该格式化为粗体!
  • 我应该注意到:我已经检查了SystemColors 类,但我认为它不完整。也许我错了,但我没有看到任何按钮颜色等。
  • 您使用的是 WPF 还是 WinForms ?如果它是 WPF,您可以看到使用的 SystemColors,如果您正在创建 DefaultTemplate,则背景属性例如按钮具有 ControlBrushKey。它对 WinForms 知之甚少,但我认为等价于 SystemColors 类中的Control

标签: c# .net vb.net windows


【解决方案1】:

是的。事实上,有一整节课专门用于此:

The SystemColors class.

...对于 WPF(感谢@ORMapper),System.Windows.SystemColors class

【讨论】:

【解决方案2】:

有一个系统颜色类,它将为您提供颜色。

对于 WinForms 使用:

System.Drawing.SystemColors

对于 WPF 使用:

System.Windows.SystemColors

【讨论】:

    【解决方案3】:

    你也可以使用GetSysColor function api函数。

    瓦尔特

    【讨论】:

      【解决方案4】:

      您可以使用 Win API,GetSysColor 函数...

      [DllImport("user32.dll", CharSet=CharSet.Auto)]
      public static extern int GetSysColor(int nIndex);
      

      函数返回给定元素的红、绿、蓝 (RGB) 颜色值。

      要显示 RGB 值的分量,请使用 GetRValue、GetGValue 和 GetBValue 宏。

      单色显示器的系统颜色通常被解释为灰色阴影。

      要使用系统颜色笔刷进行绘制,应用程序应使用 GetSysColorBrush(nIndex),而不是 CreateSolidBrush(GetSysColor(nIndex)),因为 GetSysColorBrush 返回缓存的笔刷,而不是分配新的笔刷。

      【讨论】:

        【解决方案5】:

        我也想要同样的东西。我的方法是,在初始化时,使用 GetSysColor(COLOR_BTNFACE) 中指定的背景颜色创建一个临时窗口,这是对话框的“标准”背景颜色。然后,我创建一个没有文本的按钮并获取颜色。这个临时窗口永远不会显示,并且会立即被销毁(WM_CREATE 退出代码 = -1)。

        【讨论】:

        • 你为什么要完成所有创建窗口的工作来获得它的颜色?调用 GetSysColor 并直接使用其结果有什么问题?相同的颜色 (COLOR_BTNFACE) 用作对话框、按钮和其他控件的背景颜色。文本颜色为 COLOR_BTNTEXT。
        猜你喜欢
        • 1970-01-01
        • 2020-06-23
        • 2015-03-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-26
        相关资源
        最近更新 更多