2

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

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

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

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

4

1 回答 1

2

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

您将不得不自己重新实现按钮的绘制,尽可能使用主题 API 来保留主题外观,同时潜入您的颜色。

虽然请注意,当您设置以下内容时,您几乎无法实现比 .NET WinForms 所做的更好的事情Button.BackColor

在此处输入图像描述

另请参阅问题如何设置按钮背景颜色?

反汇编 WinFormsButtonStandardAdapter.PaintWorker会给你一些你需要使用的想法和 API。请注意,您需要进行大量编码!

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

于 2013-04-14T07:42:25.630 回答