7章.CListCtrlクラス リストコントロール 7−10.カスタムドロー(NM_CUSTOMDRAW)を使用する |
MFC Class WizardからはNM_CUSTOMDRAWが選択できないようなので自分で記述します。 〜.h: // 生成されたメッセージ マップ関数 //{{AFX_MSG(CTest0031Dlg) | //}}AFX_MSG afx_msg void OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult); DECLARE_MESSAGE_MAP() 〜.cpp: BEGIN_MESSAGE_MAP(CTest0031Dlg, CDialog) //{{AFX_MSG_MAP(CTest0031Dlg) //}}AFX_MSG_MAP ON_NOTIFY(NM_CUSTOMDRAW, IDC_LIST1, OnCustomDraw) END_MESSAGE_MAP() void CTest0031Dlg::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult) {//NM_CUSTOMDRAW LPNMLVCUSTOMDRAW lcd=(LPNMLVCUSTOMDRAW)pNMHDR; switch(lcd->nmcd.dwDrawStage) { case CDDS_PREPAINT: *pResult=CDRF_NOTIFYSUBITEMDRAW;//サブアイテムを処理します。 break; case CDDS_ITEMPREPAINT://アイテム単位で処理します。 /* lcd->clrText=RGB(0xff,0xff,0xff); lcd->clrTextBk=RGB(0xff,0x00,0x00); *pResult=CDRF_NEWFONT;*/ *pResult=CDRF_NOTIFYSUBITEMDRAW;//サブアイテムを処理します。 break; case CDDS_ITEMPREPAINT|CDDS_SUBITEM: *pResult=CDRF_DODEFAULT; if(lcd->nmcd.dwItemSpec==1) {//特定のアイテムの色を指定します。 lcd->clrText=RGB(0xff,0xff,0xff); lcd->clrTextBk=RGB(0x00,0x00,0xff); *pResult=CDRF_NEWFONT; } if(lcd->iSubItem==1) {//特定のサブアイテムの色を指定します。 lcd->clrText=RGB(0xff,0xff,0xff); lcd->clrTextBk=RGB(0x00,0xff,0x00); *pResult=CDRF_NEWFONT; } if(lcd->iSubItem>1) {//サブアイテムの色を指定すると、以降の色が変わってしまうので、、、 lcd->clrTextBk=GetSysColor(COLOR_WINDOW); lcd->clrText=GetSysColor(COLOR_WINDOWTEXT); *pResult=CDRF_NEWFONT; } default: *pResult=CDRF_DODEFAULT; break; } } ※「SelectObject(lcd->nmcd.hdc,GetStockObject(ANSI_FIXED_FONT));」などによりフォントも変更できます。 ※単に太字にするのならFW_BOLDを使う手もあります。 |
Top へ戻る |