如何在 .NET 中创建非 OwnerDraw 按钮?
Posted
技术标签:
【中文标题】如何在 .NET 中创建非 OwnerDraw 按钮?【英文标题】:How to create a non OwnerDraw Button in .NET? 【发布时间】:2008-12-06 20:41:10 【问题描述】:我正在为一个软件创建一个插件,该插件可以为我创建的表单设置皮肤。但是,按钮不是基于它们的皮肤,而是显示标准的灰色按钮。在软件论坛上询问指出我 .NET 表单控件是所有者绘制的,因此我的按钮不会以正确的样式重绘,而是创建非所有者绘制按钮。
system.windows.forms 命名空间中的所有控件似乎都是 ownerdraw。
那么如何在 .NET 中创建标准 C++ PUSHBUTTON?
如果有帮助,目前正在使用 C# 编写代码。
谢谢
【问题讨论】:
【参考方案1】:Windows.Forms 中的控件不是所有者绘制的,而是系统绘制的。这是 Windows 在默认情况下绘制它们的方式,无论是 Button、TextBox 还是其他。您可以通过指定控件应该是所有者绘制的(即:您负责绘制它)来覆盖绘图 - 一些控件支持这一点,其中一些甚至具有更精细的粒度(参见 ListView),或者您可以在任何 Control 后代的 OnPaint 事件中完全覆盖绘画。
您的问题相当令人困惑 - 据我了解,您在插件中创建的按钮没有蒙皮。显然,您需要告诉这个皮肤框架来绘制这些按钮。可能有或应该有一些组件放在插件表单或您调用的方法上,它们会将蒙皮绘制例程注入您的插件。
【讨论】:
【参考方案2】:听起来您想将按钮的FlatStyle
属性设置为FlatStyle.System
。默认情况下,Windows 窗体按钮确实是 WinAPI 级别的所有者绘制,并且由框架绘制。
【讨论】:
【参考方案3】:您是否尝试过将FlatStyle
设置为另一个值,例如Flat
或Popup
,只是为了看看这是否会阻止它被剥皮?
同时设置Flaststyle = Standard
(相对于系统)可能会解决您的问题
【讨论】:
【参考方案4】:标准是默认设置,因此没有重新设置外观。当设置为平面时,我得到一个背景颜色和一个前景色,但失去了圆角结束悬停效果,表明控件没有重新设置皮肤并且只应用了颜色样式。 Flat 是唯一不是灰色的版本,但我失去了一些按钮功能(悬停、圆角)
【讨论】:
以上是关于如何在 .NET 中创建非 OwnerDraw 按钮?的主要内容,如果未能解决你的问题,请参考以下文章