1

描画される列IDを取得する必要があります。これは私のコードの一部で、ListView_GetItemText を使用してアイテム ID と列 ID を取得し、描画するアイテムの正しい色を設定しようとしています。

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 に答える