2017-06-01 39 views
4

现在我正在编写我自己的CStatic子类,并且我有点卡住如何更改其背景颜色。更改子类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); 
}; 

我试图监听所述消息,但我没有收到它。然而,我收到油漆信息,所以我不能责怪我的自定义控件根本不工作。

尝试处理绘制例程中的背景颜色是否合法?我不喜欢这样解决,但我没有收到我曾经使用过的其他信息。

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

在此先感谢。

+3

您可以使用[消息反射](https://stackoverflow.com/a/15415679/7571258)将父窗口中的WM_CTLCOLORSTATIC反射回静态。 – zett42

回答

4

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

但是,如果你要重写WM_PAINT,你可以让你的OnPaint绘制背景颜色。

+1

您的答案与zett42的评论结合解决了问题,谢谢 – Sossenbinder