如何检索与当前 Aero 样式相关的系统颜色?我特别需要选择渐变中使用的颜色。SystemColors
结构不包含所需的颜色。
或者:如何使用 WinAPI 在特定画布(图形对象)上绘制选择?
如何检索与当前 Aero 样式相关的系统颜色?我特别需要选择渐变中使用的颜色。SystemColors
结构不包含所需的颜色。
或者:如何使用 WinAPI 在特定画布(图形对象)上绘制选择?
好的,所以最初问题的答案是:无法确定我要求的具体颜色。它由操作系统提供的内部主题例程进行评估。
幸运的是,有一种方法可以让操作系统绘制一个主题控件,即所谓的部分。.NET 提供了两个用于绘制 UI 的类:
System.Windows.Forms.VisualStyles用于主题 UI 和
System.Windows.Forms.ControlPaint用于非主题“Windows 经典”。
我要求的选择可能由以下代码绘制:
// Graphics g = ...
VisualStyleRenderer selectionRenderer = new VisualStyleRenderer(VisualStyleElement.TreeView.Item.Selected);
selectionRenderer.DrawBackground(g, someRectangle);
不幸的是,默认窗口主题既不支持TreeView.Item.Selected
也不ListView.Item.Selected
支持。但是,可以通过 p/invoke 使用 WinAPI 将主题切换到资源管理器:
// C++
SetWindowTheme(hwnd, L"Explorer", nullptr);
然后通过几个 UXTheme.h 例程 P/invoke 他的方式,这非常有效。
所选项目背景的系统定义颜色,包括所选文本和所选菜单项,位于System.Drawing.KnownColor.Highlight
然后,您可以使用该Color
结构从KnownColor
例子
System.Drawing.Color.FromKnownColor(System.Drawing.KnownColor.Highlight);
谢谢,
节日快乐!:)