我需要得到将要绘制的列id。这是我的一些代码我尝试获取项目id和列id以使用ListView_GetItemText,并设置要绘制的项目的正确颜色。
switch( ((LPNMLVCUSTOMDRAW)lParam)->nmcd.dwDrawStage){
case CDDS_PREPAINT:
return CDRF_NOTIFYITEMDRAW;
break;
case CDDS_ITEMPREPAINT:
{
LPNMLVCUSTOMDRAW customDraw = (LPNMLVCUSTOMDRAW)lParam;
int itemid = (customDraw->nmcd).dwItemSpec //this is item id
//column id is missing
return CDRF_NEWFONT;
break;
}
default: return CDRF_DODEFAULT;
}
如果包含
case CDDS_ITEMPREPAINT | CDDS_SUBITEM:
int iSubItem = ((LPNMLVCUSTOMDRAW)lParam)->iSubItem;
break;
这将为您带来专栏。之所以没有发生这种情况,是因为您必须通过函数头中传递的LRESULT指针返回您希望在未来接收的通知,例如
如果你的函数头看起来像:
::OnNMCustomdraw(NMHDR* pNMHDR, LRESULT* pResult)
您需要:
*pResult |= CDRF_NOTIFYITEMDRAW;
*pResult |= CDRF_NOTIFYSUBITEMDRAW;
*pResult |= CDRF_NOTIFYPOSTPAINT;
*pResult |= CDRF_NOTIFYPOSTERASE;
在函数的末尾
NMLVCUSTOMDRAW
包含一个名为iSubItem
的成员,这将告诉您哪个"列";正在绘制。
文件对成员的描述如下:
iSubItem
型号:
int
正在绘制的子项的索引。如果正在绘制主项目,则此成员将为零。
您应该能够通过customDraw->iSubItem
引用它。如果不能,则需要确保_WIN32_IE
(直接或间接)至少定义为0x0400
。