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

Change the background color of a subclassed CStatic control

我现在正在编写自己的 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);
};

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

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

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

提前致谢。

我认为您想在承载您的控件的父级 window 中捕获 WM_CTLCOLORSTATIC。这通常用于当您希望文本控件具有不同背景颜色时。

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