TreeView mit Icon -> Nur für 1 Item



  • Hallo zusammen,

    ich lese ja schon ein paar Tage hier mit, aber jetzt bräuchte ich mal Euren fachmännischen Rat. 🙂
    Und zwar geht es um eine TreeView-Control.
    Ich möchte gerne bei manchen Items Icons davor positionieren und bei machen eben nicht.
    Komischerweise wird bei mir beim Aufruf von "TVM_SetItem" immer das Icon für alle Items in diesem Treeview geändert/gesetzt.

    Ist es überhaupt möglich für einzelne Items festzulegen, ob diese das Icon bekommen oder nicht?

    So schaut der Programmteil bisher aus:

    HICON m_hImlIcons;
    m_hImlIcons = ImageList_Create(16,16,ILC_COLOR32,1,1);
    ...
    TVITEM tvItem;
    HICON hIconSmall;
    int nIndex;
    ...
    SendMessage(hWndTree,TVM_SETIMAGELIST,TVSIL_NORMAL,(LPARAM)(HIMAGELIST)m_hImlIcons);
    ExtractIconEx("shell32.dll",6,0,&hIconSmall,1);
    nIndex = ImageList_AddIcon(m_hImlIcons,hIconSmall);
    
    tvItem.hItem = hItem;
    tvItem.mask = TVIF_HANDLE|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
    tvItem.iImage = nIndex; 
    tvItem.iSelectedImage = nIndex; 
    
    SendMessage(hWndTree,TVM_SETITEM,0,(LPARAM)(LPTVITEM)&tvItem);
    

    Möglicherweise gibt es wirklich keine Möglichkeit dies explizit festzulegen.
    Wäre echt klasse wenn jmd. eine Idee hätte bzw. irgendeinen Fehler sieht.
    Wie gesagt, das Erstellen der Treeview und der Items funtkioniert.
    Das Symbol wird auch angezeigt, aber eben bei allen Items was ich gerne verhindern würde.

    Dazu sei gesagt, daß der Aufruf erst nach Erstellen der kompletten Treeview erfolgt.
    Ich möchte also nachträglich und nicht bei der Treeview-Erstellung das Icon setzen.

    Danke und Gruß
    Holger
    P.S.: find ich gut, daß es ein deutschsprächiges C++Forum gibt, denn manchmal ist die hauptsächlich englischsprachige MSDN doch etwas schwierig 😉



  • Hast du denn für die anderen Items dann auch kein iImage angegeben?! 🙄



  • Hallo flenders,

    was meinst Du genau mit "kein iImage angegeben"?
    Also ich erstelle die Items quasi mit:

    tvItem.mask = TVIF_TEXT | TVIF_PARAM; 
    tvItem.pszText = (LPTSTR)szText; 
    tvItem.cchTextMax	= lstrlen(szText);
    tvItem.lParam = (LPARAM)m_nId; 
    tvIns.item = tvItem;
    

    Ich lasse also quasi die Eigenschaften für iImage und iSelectedImage einfach weg.
    Mich wundert ja auch, daß dann alle Items diese EIgenschaft bekommen, obwohl ich mit dem "tvItem.hItem = hItem;" beim Aufruf von TVM_SetItem explicit nur das eine Item auswähle!? 🙄
    Was ich schon probiert habe ist den Wert für iImage und iSelectedImage bei der Erstellung auf -1 zu setzen was aber nich wirklich funktioniert 😉
    Ich habe auch schon bei google ohne Ende gesucht und in diversen Foren geschaut, aber irgendwie find ich absolut nichts zu dem Thema...
    Hmmm...wer weiß.
    Aber danke erstmal 🙂
    Vielleicht fällt Dir oder jmd.anderen noch was dazu ein.
    Gruß Holger



  • Tja, ist wohl leider nicht möglich -> hier auch noch die Erklärung weshalb, ich sage nur Ordnung in der Baumstruktur 😉
    http://www.c-plusplus.net/forum/viewtopic.php?t=83634&highlight=ilccolor32


Log in to reply