如何在.NET中创建非OwnerDraw按钮?

时间:2008-12-06 20:41:11

标签: c# .net c++ ownerdrawn

我正在为我创建的表单创建一个软件插件。但是,按钮不是基于它们的皮肤,并且显示了标准灰色按钮。在软件论坛上询问我指出.NET表单控件是所有者绘制的,因此我的按钮不会使用正确的样式重绘而不是创建非ownerdraw按钮。

system.windows.forms命名空间中的所有控件似乎都是ownerdraw。

那么如何在.NET中创建一个标准的C ++ PUSHBUTTON呢?

如果有帮助,目前正在编写C#。

THX

4 个答案:

答案 0 :(得分:1)

Windows.Forms中的控件不是所有者绘制的,而是系统绘制的。这是Windows默认绘制它们的方式,无论是Button,TextBox还是其他什么。您可以通过指定控件应该是所有者绘制来覆盖绘图(即:您负责绘制它) - 某些控件支持它,其中一些甚至具有更精细的粒度(请参阅ListView),或者您可以在任何Control后代的OnPaint事件中完全覆盖绘画。

你的问题相当令人困惑 - 据我所知,你在插件中创建的按钮没有蒙皮。显然你需要告诉这个皮肤框架来绘制这些按钮。您可能或应该将某些组件放到您调用的插件表单或方法中,这些组件或方法会将蒙皮绘制例程注入到插件中。

答案 1 :(得分:1)

听起来您想将按钮的FlatStyle属性设置为FlatStyle.System。默认情况下,Windows窗体按钮确实是WinAPI级别的所有者绘制,并由框架绘制。

答案 2 :(得分:0)

您是否尝试将FlatStyle设置为其他值,例如FlatPopup,以确定是否停止对其进行换肤?

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

答案 3 :(得分:0)

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