2016-06-24 20 views
3

私は黒でウィンドウを持って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

それを解決するためによくできました。 –