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

根据以前的经验,我习惯于用所需的颜色对“CTLCOLORSTATIC”消息使用react。

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

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);
};

我试图收听上述消息,但我根本没有收到。但是,我确实收到了绘制消息,因此我不能怪我的自定义控件根本不起作用。

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

如果需要其他代码,请随时询问,我们很乐意为您提供其他资源。

提前致谢。

最佳答案

我认为您想在承载控件的父窗口中捕获WM_CTLCOLORSTATIC。当您希望文本控件具有不同的背景颜色时,通常使用该方法。

但是,如果要覆盖WM_PAINT,则最好让OnPaint绘制背景色。

08-16 08:42