2

如何检索与当前 Aero 样式相关的系统颜色?我特别需要选择渐变中使用的颜色。SystemColors结构不包含所需的颜色。

航空颜色

或者:如何使用 WinAPI 在特定画布(图形对象)上绘制选择?

4

2 回答 2

1

好的,所以最初问题的答案是:无法确定我要求的具体颜色。它由操作系统提供的内部主题例程进行评估。

幸运的是,有一种方法可以让操作系统绘制一个主题控件,即所谓的部分。.NET 提供了两个用于绘制 UI 的类:

我要求的选择可能由以下代码绘制:

// 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 他的方式,这非常有效。

于 2012-12-26T11:22:57.837 回答
0

所选项目背景的系统定义颜色,包括所选文本和所选菜单项,位于System.Drawing.KnownColor.Highlight

然后,您可以使用该Color结构从KnownColor

例子

System.Drawing.Color.FromKnownColor(System.Drawing.KnownColor.Highlight);

谢谢,
节日快乐!:)

于 2012-12-26T10:35:46.487 回答