[CTreeCtrl] NM_CUSTOMDRAW und GetItemState()
-
Hi,
ich ändere die Hintergrundfarbe eine tvItems über die NM_CUSTOMDRAW. Falls das Item ausgewählt ist, soll es ganz normal angezeigt werden. Den Zustand erfrage ich über GetItemState(). Nun gibt es ein Problem:
Wenn ich einen Knoten expandiere, dann funktioniert die Abfrage mit GetItemState() nicht mehr?void CExView::OnNMCustomdrawMainList(NMHDR *pNMHDR, LRESULT *pResult) { LPNMTVCUSTOMDRAW pTVCD = reinterpret_cast<LPNMTVCUSTOMDRAW>(pNMHDR); *pResult = CDRF_DODEFAULT; const COLORREF crCompleted = RGB(240, 255, 240); const COLORREF crPrepared = RGB(255, 240, 240); // Zeichnen von jedem Item melden if (pTVCD->nmcd.dwDrawStage == CDDS_PREPAINT) *pResult = CDRF_NOTIFYITEMDRAW; if (pTVCD->nmcd.dwDrawStage == CDDS_ITEMPREPAINT) { // Von jedem Eintrag den Zustand ermitteln und entsprechend färben CTreeCtrl* pTree = reinterpret_cast<CTreeCtrl*>(GetDlgItem(IDC_MAIN_LIST)); HTREEITEM hItem = reinterpret_cast<HTREEITEM>(pTVCD->nmcd.dwItemSpec); if (pTree->GetItemState(hItem, TVIS_SELECTED)==TVIS_SELECTED) { TRACE("View::OnNMCustomdraw()> Markiertes Item.\n"); return; } int nType = static_cast<int>(pTVCD->nmcd.lItemlParam); switch (nType) { // Einfärben // .. } } }
Was kann ich nach dem Expandieren eines Items den Zustand ermitteln?
Danke,
don_basto.
-
Hab einen Weg gefunden.
if (pTree->GetItemState(hItem, TVIS_SELECTED)==TVIS_SELECTED) { TRACE("View::OnNMCustomdraw()> Markiertes Item.\n"); return; } // ersetzen mit: if (pTVCD->nmcd.uItemState & CDIS_SELECTED) return;
Und schon funktioniert's. Kann mir jemand sagen, was an dem ersten Ansatz falsch ist?
Grüsse,
don_basto.