4

1つのウィンドウのすべての静的テキストに色を適用する次のコードを作成しましたが、別の色が1つのウィンドウで異なる色になるように、1つのウィンドウに2つの異なる色を適用したいと思います。これどうやってするの?これが私がしたことです:ID:1234ID1234

case WM_CTLCOLORSTATIC:

    SetBkColor( hdc, COLORREF( :: GetSysColor( COLOR_3DFACE) ) );    
    //sets bckcolor of static text same as window color

    if ( ( HWND ) lParam == GetDlgItem( hWnd, IDC_PID) ) 
    {
    SetTextColor( ( HDC ) wParam, RGB( 250, 50, 200));
    return ( BOOL ) CreateSolidBrush ( GetSysColor( COLOR_3DFACE) );
    }

    break;
4

1 に答える 1

2

私はあなたの問題を理解しているかどうかわかりません。あなたのコードはかなり大丈夫に見えます。注目に値する1つのポイントは、割り当てたリソースをクリーンアップする責任があるということです。上記のコードを使用HBRUSHすると、への呼び出しによって作成されたオブジェクトがリークされCreateSolidBrushます。カスタムブラシは必要ないため、GetSysColorBrushを使用する必要があります。

好みの問題として、 GetDlgCtrlIDを使用して、ウィンドウハンドルではなくコントロールIDでフィルタリングします。変更を組み込むと、コードは次のようになります。

case WM_CTLCOLORSTATIC:
    switch ( GetDlgCtrlID( (HWND)lParam ) )
    {
    case IDC_PID:
        //sets bckcolor of static text same as window color
        SetBkColor( (HDC)wParam, COLORREF( GetSysColor( COLOR_3DFACE ) ) );    
        SetTextColor( (HDC)wParam, RGB( 250, 50, 200) );
        return (INT_PTR)GetSysColorBrush( COLOR_3DFACE );

    default:
        // Message wasn't handled -> pass it on to the default handler
        return 0;
    }
于 2012-12-09T18:29:29.760 に答える