【发布时间】:2013-04-06 10:54:56
【问题描述】:
我正在使用 MFC 创建一个对话框项目并尝试为按钮赋予颜色。
我知道你唯一能做的就是让按钮所有者绘制。 OnCtlColor() 不适用于按钮。
我可以为覆盖 OnDrawItem 的按钮着色,但问题是,在此过程中,3D 酷炫的外观(在 Win7 中获得的略微圆角)丢失了。
有什么方法可以保留原生外观并在其上为按钮着色?
【问题讨论】:
标签: winapi mfc themes win32gui uxtheme
我正在使用 MFC 创建一个对话框项目并尝试为按钮赋予颜色。
我知道你唯一能做的就是让按钮所有者绘制。 OnCtlColor() 不适用于按钮。
我可以为覆盖 OnDrawItem 的按钮着色,但问题是,在此过程中,3D 酷炫的外观(在 Win7 中获得的略微圆角)丢失了。
有什么方法可以保留原生外观并在其上为按钮着色?
【问题讨论】:
标签: winapi mfc themes win32gui uxtheme
这不是一项简单的任务。只要您使用主题控件(您想要的),您就不能做超出主题允许的事情。
您必须自己重新实现按钮的绘制,尽可能使用主题 API 以保留主题外观,同时潜入您的颜色。
请注意,当您设置 Button.BackColor 时,您几乎无法实现比 .NET WinForms 所做的更好的事情:
另见问题how to set Button BackColor?
反汇编 WinForms ButtonStandardAdapter.PaintWorker 会给你一些想法和你需要使用的 API。请注意,您需要进行大量编码!
对于 C++/MFC 代码,请查看 CodeProject 上的 Vista themed Owner-Drawn and Full-Custom Push/Menu/Image Buttons。这可能实际上是你想要的(SetBackgroundColor 方法),所以你可以重用它。
【讨论】: