2017-06-01 38 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