更改子类 CStatic 控件的背景颜色

Posted

技术标签:

【中文标题】更改子类 CStatic 控件的背景颜色【英文标题】:Change the background color of a subclassed CStatic control 【发布时间】:2017-11-02 21:40:31 【问题描述】:

我现在正在编写自己的 CStatic 子类,但我对如何更改其背景颜色有点困惑。

根据以前的经验,我习惯于用我想要的颜色对“CTLCOLORSTATIC”消息做出反应。

但是,这是我目前的子类:

class LocationPane : public CWindowImpl<LocationPane, CStatic>

    DECLARE_WND_CLASS(L"LocationPane");
public:
    BEGIN_MSG_MAP_EX(LocationPane)
        MSG_WM_PAINT(OnPaint)
        MSG_WM_CTLCOLORSTATIC(OnCtlColorStatic);
    END_MSG_MAP()

    LocationPane();
    ~LocationPane();

private:

    HBRUSH OnCtlColorStatic(CDCHandle cd, CWindow wnd);

    //Paint routine
    void OnPaint(CDCHandle dc);
;

我试图收听该消息,但我根本没有收到它。但是我确实收到了绘制消息,所以我不能责怪我的自定义控件根本不起作用。

尝试在绘制例程中处理背景颜色是否是合法的解决方案?我真的不喜欢用这种方式解决它,但我没有收到我习惯使用的其他消息。

如果需要额外的代码,请随时询问,我很乐意为您提供额外的资源。

提前致谢。

【问题讨论】:

您可以使用message reflection 将 WM_CTLCOLORSTATIC 从父窗口反射回静态。 【参考方案1】:

我认为您希望在托管您的控件的父窗口中捕获WM_CTLCOLORSTATIC。这通常用于当您希望文本控件具有不同的背景颜色时。

但如果您要覆盖 WM_PAINT,您不妨让 OnPaint 绘制背景颜色。

【讨论】:

您的回答结合zett42的评论解决了问题,谢谢

以上是关于更改子类 CStatic 控件的背景颜色的主要内容,如果未能解决你的问题,请参考以下文章

在 MFC 控件中更改背景和标题的颜色

是否可以更改 CMFCEditBrowseCtrl 控件的背景颜色?

当显示 UIPopoverController 时,如何更改背景后面的控件颜色?

更改按钮的背景颜色

如何更改MFC按钮的背景色

如何更改悬停时gridview内可用控件的工具提示的背景颜色