2016-06-24 3 views
3

У меня возникли проблемы с установкой цвета фона CStatic с помощью WTL (я предполагаю, что я должен был бы один и тот же вопрос с MFC)Цвет фона CStatic выпуска

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

Вот код в функции обратного вызова:

LRESULT CReportResults::OnCtrColorStatic(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) 
{ 
    if ((HWND)lParam == m_wndLoadingLabel.m_hWnd) 
    { 
     HDC  hDC = (HDC)wParam; 

     SetBkColor(hDC, APP_COLOR_BACKGROUND); 
     SetTextColor(hDC, APP_COLOR_TEXT); 
    } 
    return 0; 
} 

И вот что он заканчивает тем, как на экране. Сам элемент управления больше, чем текст в нем, но я не уверен, как заставить остальную часть элемента управления рисовать черным фоном. По-видимому, настройка цвета фона на черный только влияет на область отображения текста. Любые идеи о том, что я могу делать неправильно?

This is what it looks like

ответ

5

Найдена моя ошибка. Я возвращал ноль в обработчике OnCtrColorStatic. Я переключился на возврат кисти, которая используется для цвета фона приложений, и теперь все работает хорошо.

LRESULT CReportResults::OnCtrColorStatic(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) 
{ 
    if ((HWND)lParam == m_wndLoadingLabel.m_hWnd) 
    { 
     HDC  hDC = (HDC)wParam; 

     SetBkColor(hDC, APP_COLOR_BACKGROUND); 
     SetTextColor(hDC, APP_COLOR_TEXT); 
    } 
    return (LRESULT)g_app.background_brush; 
} 
+2

Вы должны * никогда не возвращать ноль в обработчике CtrlColor. Если вы не возвращаете пользовательскую кисть, вы должны вызвать процедуру окна по умолчанию и вернуть возвращаемое значение. –

+0

Хорошо сделано для его решения. –

Смежные вопросы