4

我可以使用 ControlPaint.DrawBorder3D 绘制 3D 边框,但我得到了“Windows 经典”3D 边框。我想绘制当前主题的 3D 边框——在默认的 XP 主题中,这是一个 1px 的蓝色或灰色边框。我如何绘制它,以及如何获得它的宽度?

4

2 回答 2

4

听起来您可能需要查看System.Windows.Forms.VisualStyles.VisualStyleRenderer

System.Windows.Forms.VisualStyles 命名空间公开VisualStyleElement 了表示视觉样​​式支持的所有控件和用户界面 (UI) 元素的对象。要绘制或获取有关特定元素的信息,您必须将 a 设置VisualStyleRenderer为您感兴趣的元素。

要绘制元素,请使用 DrawBackground方法。该类 VisualStyleRenderer还包括方法,例如GetColorGetEnumValue,它们提供有关当前视觉样式如何定义元素的信息。

该页面上还有一个代码示例。

您必须自己绘制边框,但是您可以从中获取颜色, VisualStyleElement.Window.Caption.Active并且大小应该是窗口框架的大小(我相信),即VisualStyleElement.Window.FrameBottom.Active. 如果您探索VisualStyleElement.Window,您应该能够确定哪个窗口元素具有绘制边框所需的信息。

于 2009-02-23T21:47:13.633 回答
1

Pre .NET Framework 2.0 答案

我假设您正在绘制自己的特殊控件,并且您想使用当前活动主题的元素来绘制它,以便它更适合标准 XP 控件。例如,您不会尝试在标准 Button 控件上启用主题。正确的?

它实际上有些复杂。您的主要关注点应该是 UxTheme.dll。这包含了绘制主题控件所需的一切。 是一个很好的围绕这个 dll 的 C# 包装器,让您的生活更轻松。还有其他的,所以如果这不是你想要的,我希望我已经为你指出了正确的方向。

于 2009-02-23T21:39:57.690 回答