Изменение цвета фона элемента управления 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);
};

Я пытался прослушать указанное сообщение, но я его вообще не получаю. Однако я получаю сообщение о краске, поэтому я не могу винить свой пользовательский элемент управления в том, что он вообще не работает.

Является ли законным решением попытаться обработать цвет фона в процедуре рисования? Мне не очень нравится решать это таким образом, но я не получаю другого сообщения, с которым я привык работать.

Если нужен дополнительный код, не стесняйтесь спрашивать, я с удовольствием предоставлю вам дополнительные ресурсы.

Заранее спасибо.


person Sossenbinder    schedule 01.06.2017    source источник
comment
Вы можете использовать отражение сообщения, чтобы отразить WM_CTLCOLORSTATIC из родительского окна обратно в статическое.   -  person zett42    schedule 01.06.2017


Ответы (1)


Я думаю, вы хотите поймать WM_CTLCOLORSTATIC в родительском окне, в котором находится ваш элемент управления. Это обычно используется, когда вы хотите, чтобы текстовый элемент управления имел другой цвет фона.

Но если вы собираетесь переопределить WM_PAINT, вы можете также позволить вашему OnPaint рисовать фоновый цвет.

person selbie    schedule 01.06.2017
comment
Ваш ответ в сочетании с комментарием zett42 решил проблему, спасибо - person Sossenbinder; 01.06.2017