リストコントロールアイテムのカスタムドロー

twhs2008-01-31


NM_CUSTOMDRAWのイベントハンドラに下記のように記述する。
アイテムの設定を変更するとそれ以降のアイテムに影響するので
デフォルト設定をしておかなければならない

void CnmCustomDrawTestDlg::OnNMCustomdrawListNum(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMLVCUSTOMDRAW pNMLVCD = reinterpret_cast(pNMHDR);

	if (!pNMLVCD) {
		*pResult = 0;
		return;
	}

	switch(pNMLVCD->nmcd.dwDrawStage)
	{
	case CDDS_PREPAINT:
		*pResult = CDRF_NOTIFYSUBITEMDRAW;
		break;
	case CDDS_ITEMPREPAINT:		//アイテム単位で処理
		*pResult = CDRF_NOTIFYSUBITEMDRAW;
		break;
	case CDDS_ITEMPREPAINT | CDDS_SUBITEM:
		*pResult = CDRF_DODEFAULT;

		switch (pNMLVCD->iSubItem)
		{
		case 1:
			pNMLVCD->clrText = RGB(0xFF, 0x00, 0x00);
			*pResult = CDRF_NEWFONT;
			break;
		case 2:
			pNMLVCD->clrText = RGB(0x00, 0xFF, 0x00);
			*pResult = CDRF_NEWFONT;
			break;
		default:	// cade1やcase2で色が変わってしまうので設定する必要がある
			pNMLVCD->clrText = ::GetSysColor(COLOR_WINDOWTEXT);
			*pResult = CDRF_NEWFONT;
			break;
		}
		break;
	default:
		*pResult = CDRF_DODEFAULT;
		break;
	}
}

参照
http://www24.cds.ne.jp/~neg/pro/piyo1/clc/custom.html
http://homepage1.nifty.com/MADIA/vc/vc_bbs/200709/200709_07090039.html