响应控件的NM_CUSTOMDRAW 事件,并实现如下自绘代码:
void CDBManageDlg::SelfDraw(NMHDR *pNMHDR,
LRESULT *pResult,
CListCtrl& ctrlList,
COLORREF SelTextColor /* = RGBPUREWHITE */,
COLORREF SelTextBkColor /* = RGBPUREBLUE */,
COLORREF UnselTextColor /* = RGBPUREANTIRED */,
COLORREF UnselTextBkColor /* = RGBPUREBLACK */)
{
LPNMLVCUSTOMDRAW pNMCD = reinterpret_cast<LPNMLVCUSTOMDRAW>(pNMHDR);
LV_ITEM lvItem;
SHORT shSelIndex = -1;
CString strText;
BOOL bSelLine = FALSE;
lvItem.mask = LVIF_TEXT;
int nRow = int(pNMCD->nmcd.dwItemSpec);
POSITION POS = ctrlList.GetFirstSelectedItemPosition();
while (POS)
{
shSelIndex = ctrlList.GetNextSelectedItem(POS);
if (nRow == shSelIndex)
{
bSelLine = TRUE;
break;
}
}
switch (pNMCD->nmcd.dwDrawStage)
{
case CDDS_PREPAINT:
*pResult = CDRF_NOTIFYITEMDRAW;
break;
case CDDS_ITEMPREPAINT:
*pResult = CDRF_NOTIFYSUBITEMDRAW;
break;
case CDDS_SUBITEM | CDDS_ITEMPREPAINT:
if (bSelLine)
{
pNMCD->clrText = SelTextColor;
pNMCD->clrTextBk = SelTextBkColor;
}
else
{
pNMCD->clrText = UnselTextColor;
pNMCD->clrTextBk = UnselTextBkColor;
}
*pResult = CDRF_NEWFONT;
break;
default:
*pResult = 0;
break;
}
}
调用示例:
m_pView->SelfDraw(pNMHDR, pResult, m_ctrlTest, RGBPUREWHITE, RGBPUREBLUE, RGBPUREBLACK, RGBPUREWHITE);
<script type="text/javascript"></script>
<script type="text/javascript"></script>
<script type="text/javascript"> </script>
<script type="text/javascript"> </script>