首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >视觉样式独立绘图

视觉样式独立绘图
EN

Stack Overflow用户
提问于 2010-08-15 00:17:05
回答 1查看 1.9K关注 0票数 6

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

有很多类可以用来绘制看起来像真实控件的控件:ControlPaintVisualStyleRendererButtonRendererCheckBoxRendererComboBoxRendererGroupBoxRendererProgressBarRendererRadioButtonRendererScrollBarRenderer、<代码>D9、<代码>D10、<代码>D11、<代码>D12、<代码>D13、<代码>D14、<代码>D15。

考虑视觉风格时出现的问题:我想独立于视觉风格。意思:我不关心用户是否允许视觉风格,我希望它能工作。如果用户启用了视觉样式,我想使用视觉样式来绘制它,否则我想不使用视觉样式来绘制它。

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

假设我想自己绘制一个Tab控件部件。TabRenderer类具有所有需要的功能,但它只有在用户启用视觉样式的情况下才能工作。否则我需要使用ControlPaint类来绘制,但它使用完全不同的模型,没有ControlPaint.DrawTab()方法或类似的东西,我需要弄清楚我需要绘制哪些矩形类型,以便它看起来像一个真正的选项卡。这太烦人了。

内置控件(包括Tab控件)已经具有此功能,可以在具有或不具有视觉样式的情况下绘制自身。为什么微软不向自定义控件创建者公开此功能?为什么自定义控件创建者应该受到影响?

EN

回答 1

Stack Overflow用户

发布于 2010-08-15 00:59:07

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

它们使用的一种常见模式是创建名为MyControlRenderer.cs的内部类。在这个渲染器里面是魔术真正发生的地方。如果您查看NET REF代码,您将看到它们也使用来自System.Windows.Forms.VisualStyles命名空间的VisualStyleRenderer类,并且还有一些实际的绘图代码。

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

当我希望下班回家的时候,我会多发一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3484143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档