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