在NMLVCUSTOMDRAW C++中获取列ID



我需要得到将要绘制的列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

相关内容

  • 没有找到相关文章

最新更新