1

我需要获取将绘制的列 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;
}
4

2 回答 2

2

如果你包括

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;

在你的函数结束时

于 2012-10-10T22:36:03.900 回答
1

NMLVCUSTOMDRAW包含一个名为 的成员iSubItem,这将告诉您正在绘制哪个“列”。

文档是这样描述该成员的:

iSubItem

类型:int

... 正在绘制的子项的索引。如果正在绘制主要项目,则此成员将为零。

您应该可以通过customDraw->iSubItem. 如果你不能,那么你需要确保你已经_WIN32_IE (直接或间接)定义为至少0x0400.

于 2012-09-01T04:04:43.153 回答