ボタンの色を変更するならオーナー描画にしなければならない.
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);
}
}
ボタン押下だけでなく,フォーカス取得の時や無効の時も同様である.
参照
ボタンのフォント
ボタンのフォント(オーナー描画)
ボタンにビットマップ表示
ボタンのオーナー描画