MFC彩色按钮具有原生win7外观

时间:2013-04-14 06:17:54

标签: winapi mfc themes win32gui uxtheme

我正在使用MFC创建一个对话框项目并尝试为按钮赋予颜色。

我开始知道你唯一能做的就是让按钮所有者画画。 OnCtlColor()不适用于按钮。

我可以为覆盖OnDrawItem的按钮上色,但问题是,在此过程中,3D酷炫的外观(在Win7中会有一个圆角)会丢失。

有没有什么方法可以保留原生外观并为其上面的按钮着色?

1 个答案:

答案 0 :(得分:2)

这不是一项微不足道的任务。只要您使用主题控件(您想要的是什么),您就无法完成主题允许的操作。

您必须自己重新实现按钮的绘制,尽可能多地使用主题API来保留主题外观,同时隐藏您的颜色。

虽然注意到当你设置Button.BackColor时,你很难做到比.NET WinForms更好的东西:

enter image description here

另见问题how to set Button BackColor?

反汇编WinForms ButtonStandardAdapter.PaintWorker会给你一些你需要使用的想法和API。当心,你需要做很多编码!

对于C ++ / MFC代码,请在CodeProject上查看Vista themed Owner-Drawn and Full-Custom Push/Menu/Image Buttons。这可能实际上是你想要的(SetBackgroundColor方法),所以你可以重复使用它。