金曜日, 1月 13, 2006

今日はお仕事メモ(その2)

今日もVC++のTips

ダイアログのボタンの文字の色を変えてみる。

リソースエディタで、ボタンの種類を「オーナードロー」にする。
クラスにWindowsメッセージハンドラ(WM_DRAWITEM)を追加する。
クラスを選んで右クリックして、Windowsメッセージハンドラの追加を行う。
どこかで以下のボタン色RGBを定義しておいて、必要に応じてこのRGB値で色を制御する。

m_btn_text_color_R
m_btn_text_color_G
m_btn_text_color_B

void XXXXXXXX::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
{
// TODO: この位置にメッセージ ハンドラ用のコードを追加するかまたはデフォルトの処理を呼び出してください
if( nIDCtl == IDC_BTN_NEXT ) {
CDC* pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
UINT state = DFCS_BUTTONPUSH;
if ( lpDrawItemStruct->itemState & ODS_SELECTED ) state |= DFCS_PUSHED; // 凹む
pDC->DrawFrameControl(&lpDrawItemStruct->rcItem, DFC_BUTTON, state);
pDC->SetTextColor(RGB(m_btn_text_color_R, m_btn_text_color_G, m_btn_text_color_B));
CString caption;
GetDlgItem(nIDCtl)->GetWindowText(caption);
pDC->DrawText(caption,&lpDrawItemStruct->rcItem, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
} else {
CDialog::OnDrawItem(nIDCtl, lpDrawItemStruct);
}
}