2016-05-27 44 views
1

MFCアプリケーションで3つのラジオボックスの背景色を変更しようとしていますが、何となくデフォルトの色のままです。C++ MFCラジオボックスの背景色を変更しています

私の最新の試みは次のとおりです。 IDC_LIKE、IDC_FOLLOW、およびIDC_COMMENTは、色を変更しようとしている3つのラジオボックスの識別子です。 私はCTLCOLOR_STATICフィールドを変更しようとしましたが、それも動作しません。

どうすれば修正できますか?

// CCompleteControlDlg message handlers 
HBRUSH CCompleteControlDlg::OnCtlColor(CDC * pDC, CWnd * pWnd, UINT nCtlColor) 
{ 
if (pWnd->GetDlgCtrlID() == IDC_LIKE || pWnd->GetDlgCtrlID() == IDC_FOLLOW || pWnd->GetDlgCtrlID() == IDC_COMMENT) { 
    pDC->SetTextColor(RGB(0, 0, 0)); 
    pDC->SetBkColor(RGB(136, 217, 242)); 
    pDC->SetBkMode(TRANSPARENT); 
    return (HBRUSH)GetStockObject(NULL_BRUSH); 
} 
else { 
    switch (nCtlColor) { 
    case CTLCOLOR_STATIC: 
     pDC->SetTextColor(RGB(0, 0, 0)); 
     pDC->SetBkColor(RGB(136, 217, 242)); 
     pDC->SetBkMode(TRANSPARENT); 
     return (HBRUSH)GetStockObject(NULL_BRUSH); 

    case CTLCOLOR_DLG: return m_brush; 

    case CTLCOLOR_BTN: 
     pDC->SetTextColor(RGB(255, 255, 255)); 
     pDC->SetBkColor(RGB(136, 217, 242)); 
     return (HBRUSH)GetStockObject(NULL_BRUSH); 

    default: 
     return CCompleteControlDlg::OnCtlColor(pDC, pWnd, nCtlColor); 
    } 
} 
} 
+0

ダイアログボックスの色とスタティックテキストの変更は、ラジオボックスでは機能しません –

答えて

2

SetTextColorSetBkColorは、ボタンの文字色と背景色には影響を与えません。あなたはブラシを返す必要があります。あなたは既にm_brushを持っている、ちょうどダイアログのためにそれを使用してコントロール:

HBRUSH CCompleteControlDlg::OnCtlColor(CDC * pDC, CWnd * pWnd, UINT nCtlColor) 
{ 
    ... 
    return m_brush; 
} 

m_brushCreateSolidBrush(RGB(136, 217, 242))...

として作成されただけでなく、静的なコントロールを処理するには、それが透明にバックグラウンドモードを設定するだけで十分です。

HBRUSH CCompleteControlDlg::OnCtlColor(CDC * pDC, CWnd * pWnd, UINT nCtlColor) 
{ 
    pDC->SetTextColor(RGB(0, 0, 0)); 
    pDC->SetBkMode(TRANSPARENT); 
    return m_brush; 
} 

それとも、静的および編集コントロールの背景色+不透明な背景を使用することができます。

pDC->SetTextColor(RGB(0, 0, 0)); 
pDC->SetBkColor(RGB(136, 217, 242)); 
pDC->SetBkMode(OPAQUE); 
return m_brush; 
+0

これはチェックボックスで機能しますが、何らかの理由でラジオボタンでは機能しません –

+0

チェックボックスとラジオボタンが同じです。 'pDC-> SetBkMode(TRANSPARENT)'を呼び出すか、 'SetBkMode(OPAQUE)+ SetBkColor(...)'を呼び出すことを確認してください。 –

+0

ありがとうございます! –

関連する問題