我可以使用 ControlPaint.DrawBorder3D 绘制 3D 边框,但我得到了“Windows 经典”3D 边框。我想绘制当前主题的 3D 边框——在默认的 XP 主题中,这是一个 1px 的蓝色或灰色边框。我如何绘制它,以及如何获得它的宽度?
2 回答
听起来您可能需要查看System.Windows.Forms.VisualStyles.VisualStyleRenderer:
System.Windows.Forms.VisualStyles
命名空间公开VisualStyleElement
了表示视觉样式支持的所有控件和用户界面 (UI) 元素的对象。要绘制或获取有关特定元素的信息,您必须将 a 设置VisualStyleRenderer
为您感兴趣的元素。要绘制元素,请使用
DrawBackground
方法。该类VisualStyleRenderer
还包括方法,例如GetColor
和GetEnumValue
,它们提供有关当前视觉样式如何定义元素的信息。
该页面上还有一个代码示例。
您必须自己绘制边框,但是您可以从中获取颜色, VisualStyleElement.Window.Caption.Active
并且大小应该是窗口框架的大小(我相信),即VisualStyleElement.Window.FrameBottom.Active
. 如果您探索VisualStyleElement.Window
,您应该能够确定哪个窗口元素具有绘制边框所需的信息。
Pre .NET Framework 2.0 答案
我假设您正在绘制自己的特殊控件,并且您想使用当前活动主题的元素来绘制它,以便它更适合标准 XP 控件。例如,您不会尝试在标准 Button 控件上启用主题。正确的?
它实际上有些复杂。您的主要关注点应该是 UxTheme.dll。这包含了绘制主题控件所需的一切。 这是一个很好的围绕这个 dll 的 C# 包装器,让您的生活更轻松。还有其他的,所以如果这不是你想要的,我希望我已经为你指出了正确的方向。