Last Updated 2011/04/06
Programming Tips Visual C++ MFC CButton  索 引 
ボタンのオーナー描画
2004/06/10

ボタンの色を変更する為に,ボタンのスタイルをオーナー描画とする.

ClassWizard で WM_DRAWITEM のハンドラを指定すれば以下のハンドラが作成される.

void CMyDlg::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct) 
{
}

nIDCtl にはコントロールの識別子が入っている.
DRAWITEMSTRUCT 構造体の CtlType には,ボタンであれば ODT_BUTTON,メニューであれば ODT_MENU が格納されている.

itemState には描画すべき状態が格納されている.
ODS_SELECTED であれば「ボタンが押された状態」を描画しなければならない.
ODS_FOCUS であれば「ボタンにフォーカスがある状態」を描画しなければならない.

描画するにはデバイスコンテキストが必要である.このデバイスコンテキストも DRAWITEMSTRUCT 構造体から取得する.

    CDC *pDC = CDC::FromHandle( lpDrawItemStruct->hDC );

とすれば CDC クラスが使用できる.

オーナー描画は全てを自分で描画しなければならない.ボタンの枠や影もそれに漏れない.当然フォーカスがあたっている時の点線も同様である.

ボタンのイメージを描画するには,DrawFrameControl() を使用するとよい.
    pDC->DrawFrameControl(&lpDrawItemStruct->rcItem, DFC_BUTTON, DFCS_PUSHBUTTON);

また,フォーカス時の点線は DrawFocusRect() を使用する.


参照
ボタンの色
ボタンのフォント(オーナー描画)
前後のTips
ボタンのオーナー描画

DSS ProgrammingTipsCGI Ver2.02