Last Updated 2011/04/06
Programming Tips Visual C++ MFC CButton  索 引 
ボタンの色
2003/04/03

ボタンの色を変更するならオーナー描画にしなければならない.
WM_DRAWITEM ハンドラに記述する.

void XXX::OnDrawItem(int nID, LPDRAWITEMSTRUCT pds)
{
    if( nID == 描画したいボタンのID ) {
        CDC* pDC = CDC::FromHandle(pds->hDC);
        pDC->DrawFrameControl(&pds->rcItem, DFC_BUTTON, DFCS_BUTTONPUSH);
        pDC->SetTextColor(RGB(FF, 0, 0));
        CString caption;
        GetDlgItem(nID)->GetWindowText(caption);
        pDC->DrawText(caption,&pds->rcItem, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
    } else {
        親クラス::OnDrawItem(nTD,pds);
    }
}

オーナー描画の場合,ボタンが押下されている状態も自分で描画しなければならない.

void XXX::OnDrawItem(int nID, LPDRAWITEMSTRUCT pds)
{
    if( nID == 描画したいボタンのID ) {
        CDC* pDC = CDC::FromHandle(pds->hDC);
        UINT state = DFCS_BUTTONPUSH;
        if ( pds->itemState & ODS_SELECTED ) state |= DFCS_PUSHED; // 凹む
        pDC->DrawFrameControl(&pds->rcItem, DFC_BUTTON, state);
        pDC->SetTextColor(RGB(FF, 0, 0));
        CString caption;
        GetDlgItem(nID)->GetWindowText(caption);
        pDC->DrawText(caption,&pds->rcItem, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
    } else {
        親クラス::OnDrawItem(nTD,pds);
    }
}

ボタン押下だけでなく,フォーカス取得の時や無効の時も同様である.


参照
ボタンのフォント
ボタンのフォント(オーナー描画)
ボタンにビットマップ表示
ボタンのオーナー描画
前後のTips
ボタンの色

DSS ProgrammingTipsCGI Ver2.02