视觉风格独立绘图

时间:2010-08-14 16:17:05

标签: c# winforms drawing visual-styles

使用C#winforms,我想创建看起来像真实的自定义控件。

有很多类可用于绘制看起来像真实的控件:ControlPaintVisualStyleRendererButtonRendererCheckBoxRenderer,{{1 }},ComboBoxRendererGroupBoxRendererProgressBarRendererRadioButtonRendererScrollBarRendererTabRendererTextBoxRendererTextRendererToolStripProfessionalRendererToolStripRendererToolStripSystemRenderer

考虑视觉风格时出现的问题:我希望视觉风格独立。含义:我不在乎用户是否允许视觉风格,我希望它能够工作。如果用户启用了视觉样式,我想使用视觉样式绘制它,否则我想在没有视觉样式的情况下绘制它。

通过MSDN文档,唯一独立于视觉样式的类是TrackBarRendererButtonRendererCheckBoxRendererGroupBoxRenderer。这意味着对于所有其他情况,我需要检查自己是否启用了视觉样式并使用不同的代码来绘制部件。

假设我想自己绘制一个Tab控制部件。 RadioButtonRenderer类具有所有需要的功能,但只有在用户启用的视觉样式时才有效。否则我需要使用TabRenderer类绘制,但它使用完全不同的模型,没有ControlPaint方法或类似的东西,我需要弄清楚我需要绘制哪些矩形类型,所以它看起来像一个真正的标签。那很讨厌。

内置控件(包括Tab控件)已经具有使用或不使用视觉样式绘制自身的功能。为什么微软不会为自定义控件创建者公开此功能?为什么自定义控件创建者会受到影响?

1 个答案:

答案 0 :(得分:0)

不幸的是,这是一种痛苦,但这是编写自定义控件的成本。我在许多WinForm控件中看到Microsoft这样做的方法是检查Application.RenderWithVisualStyes和Control.UseVisualStyleBackColor。根据这些值,他们会相应地绘制控件。

他们使用的常见模式是创建名为MyControlRenderer.cs的内部类。在这个渲染器里面是魔法实际发生的地方。如果你看一下NET REF代码,你会看到他们也使用System.Windows.Forms.VisualStyles命名空间中的VisualStyleRenderer类,并且还有一些实际的绘图代码。

您需要混合使用这些不同的类和工具,并混合使用自己的工作。使用和不使用视觉样式在计算机上测试控件。

当我希望下班回家时,我会发布更多内容。

相关问题