如何在 .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 设置为另一个值,例如FlatPopup,只是为了看看这是否会阻止它被剥皮?

同时设置Flaststyle = Standard(相对于系统)可能会解决您的问题

【讨论】:

【参考方案4】:

标准是默认设置,因此没有重新设置外观。当设置为平面时,我得到一个背景颜色和一个前景色,但失去了圆角结束悬停效果,表明控件没有重新设置皮肤并且只应用了颜色样式。 Flat 是唯一不是灰色的版本,但我失去了一些按钮功能(悬停、圆角)

【讨论】:

以上是关于如何在 .NET 中创建非 OwnerDraw 按钮?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Ejabberd 中创建非匿名房间 [关闭]

如何在 MFC 中创建非交互式窗口

如何在 Visual Studio 2019 C++ 中创建非虚拟文件夹

如何使作曲家在容器中创建非root用户拥有的文件?

如何在MFC中创建非交互式窗口

如何在Visual C ++中创建非托管Windows GUI?