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