【问题标题】:MFC colored button with native win7 appearance具有原生 win7 外观的 MFC 彩色按钮
【发布时间】:2013-04-06 10:54:56
【问题描述】:

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

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

我可以为覆盖 OnDrawItem 的按钮着色,但问题是,在此过程中,3D 酷炫的外观(在 Win7 中获得的略微圆角)丢失了。

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

【问题讨论】:

    标签: winapi mfc themes win32gui uxtheme


    【解决方案1】:

    这不是一项简单的任务。只要您使用主题控件(您想要的),您就不能做超出主题允许的事情。

    您必须自己重新实现按钮的绘制,尽可能使用主题 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 方法),所以你可以重用它。

    【讨论】:

    • 感谢您提供有用的链接。我会经历同样的事情,看看它们是否有用
    • 不客气。如果对您有帮助,请接受答案:)
    猜你喜欢
    • 1970-01-01
    • 2010-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-22
    • 1970-01-01
    相关资源
    最近更新 更多