6章.ListBoxクラス リストボックス 6−3.オーナー描画する |
プロパティでオーナー描画を「固定」もしくは「可変」にします。 「文字列あり」を必要に応じてチェックします。 void CTest0037Dlg::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct) {//WM_DRAWITEM // TODO:この位置にメッセージ ハンドラ用のコードを追加するかまたはデフォルトの処理を呼び出してください if(nIDCtl==IDC_LIST1) { BYTE r,g,b; COLORREF rgb; CString csb; CListBox *clb=(CListBox *)GetDlgItem(nIDCtl); CDC *cdc=CDC::FromHandle(lpDrawItemStruct->hDC); CRect crt=lpDrawItemStruct->rcItem; r=g=b=0x00; if(lpDrawItemStruct->itemID & 1) r=0xff; if(lpDrawItemStruct->itemID & 2) g=0xff; if(lpDrawItemStruct->itemID & 4) b=0xff; if(lpDrawItemStruct->itemState & ODS_SELECTED) r=r/3*2,g=g/3*2,b=b/3*2; /* rgb=::GetSysColor(COLOR_HIGHLIGHT); else rgb=::GetSysColor(COLOR_WINDOW);*/ rgb=RGB(r,g,b); cdc->FillSolidRect(&crt,rgb); // if(lpDrawItemStruct->itemState & ODS_FOCUS) cdc->DrawFocusRect(&crt); clb->GetText(lpDrawItemStruct->itemID,csb); cdc->SetTextColor(RGB(0xff-r,0xff-g,0xff-b)); cdc->DrawText(csb,&crt, DT_LEFT|DT_WORDBREAK|DT_EXPANDTABS|DT_CALCRECT); cdc->DrawText(csb,&crt,DT_LEFT|DT_WORDBREAK|DT_EXPANDTABS); } CDialog::OnDrawItem(nIDCtl, lpDrawItemStruct); } ※OnMeasureItem(WM_MEASUREITEM)で高さを指定できます。 ※「可変」を指定した場合はOnMeasureItemがアイテムごとに呼ばれます。 |
Top へ戻る |