Image Liste mit verschiedenen Icons laden?



  • Hi Forum,
    wie kann ich eine Imageliste mit verschiedenen Icons laden, es geht dabei um ein CListCtr das die Icons erhalten soll, ich hab jetzt zwei Imagelisten die eine mit 16 x 16 px, und eine mit 32 x 32 px, die haben aber beide die selben Images, 😕 , ich möchte nach bestimmten Kriterien die Einträge in der Listbox versehen! Das geht doch, oder, so was wie Ampel möchte ich haben, das nach bestimmten Kriterien einmal das rote Icon geladen wird und einmal das grüne, das hab ich wie gesagt mit einfachen Icons gemacht:

    HICON hIcon;
    hIcon = ::LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICONRED16));
    m_smallImageList.Add(hIcon); // Liste mit kleinen Icons
    
    hIcon = ::LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICONRED32));
    m_largeImageList.Add(hIcon); // Liste mit großen Icons
    

    Da sind aber immer die selben Icons drinnen! Rote runde icons,
    muß ich jetzt noch 2 listen für große und kleine grüne erstellen???
    oder kann man die alle zusammen in eine Liste packen??
    mfg
    mirsad



  • Hi,

    vielleicht versteh ich Dich ja nicht ganz, aber Du lädst die beiden Imagelisten doch schon? Zwar nur mit jeweils einem Element, aber immerhin... 🙂
    Um verschiedene Element aus einer Imagelist in einer Listcontrol anzuzeigen, musst Du die Imagelist mit den verschiedenen Bildern (Icons) laden und dann den Index des entsprechenden Bildes in der Imagelist an das Listcontrol übergeben.

    Gruss

    yeti

    [EDIT]
    Ich hätte es vielleicht gleich richtig lesen sollen:

    Du packst die kleinen Bilder (rot, gelb, grün) in eine Liste und analog die grossen in eine zweite. Allerdings kanns Du für ein Listcontrol nur eine der beiden Listen verwenden (Jedenfalls ist das mein Kenntnisstand).
    [/EDIT]



  • hi yeti,
    du hast es schon verstanden, das wollte ich wissen, ob ich die icons als array behandeln kann! Beim WinExplorer z.B. hast verschiedene Dateien und jede hat ihren eigenen icon abhängig vom Typ, da es bei mir um Tasks geht möchte ich je nach dem aktuellen Status des jeweiligen Tasks in dem Scheduler, bestimmten Icon laden in die Liste, wenn der Task ausgeführt würde z.B. möchte ich das ein grüner Icon neben dem Tasknamen steht!
    Ich brauch wohl mehr Theorie darüber 🙂

    mfg
    mirsad



  • Hi,
    ok ein neuer Versuch 🙂 , ich habe zwei Listen mit je zwei Icons erstellt, eine mit zwei kleinen und eine mit zwei großen Icons:

    CImageList m_smallImageList;// für kleine Symbole
    CImageList m_largeImageList;// für große Symbole
    HICON hIcon; // Icon Handle
    
    m_smallImageList.Create(16,16,FALSE, 2,0); // 16x16, keine Maske, 2 Icons, keine Erweiterung!
    m_largeImageList.Create(32,32,FALSE,2,0); // 32x32, keine Maske, 2 Icons...
    
    hIcon = ::LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICONRED16));
    m_smallImageList.Add(hIcon); // kleinen roten Icon laden
    
    hIcon = ::LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICONGREEN16));
    m_smallImageList.Add(hIcon); // den kleinen grünen dazu, jetzt die grossen
    
    hIcon = ::LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICONRED32));
    m_largeImageList.Add(hIcon); // der große rote mit 32x32
    
    hIcon = ::LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICONGREEN32));
    m_largeImageList.Add(hIcon); // und der grüne mit 32x32
    
    // jetzt der ListenAnsicht die IconListen zuweisen:
    // die kleinen Icons für die Ansichten Report,List...
    m_cListeTasks.SetImageList(&m_smallImageList,LVSIL_SMALL);
    // jetzt der ListenAnsicht die IconListen mit den grossen Icons für die Ansicht Icon
    m_cListeTasks.SetImageList(&m_largeImageList,LVSIL_NORMAL);
    
    // Wie kann ich jetzt den bestimmten Icon auswählen, wie kann ich auf den Index zugerifen??
    

    Also jetzt möchte ich den Status meines Tasks abfragen
    und in die Listen Ansicht den Tasknamen und davor den entsprechenden Icon laden,
    jetzt sind es immer die roten , mir geht so was wie "GetIndex" ab 🙄 halt methode wie ich auf die bestimmten Icons zugreifen kann? 😕
    Was hab ich ausgelassen, oder vergessen oder einfach falsch gemacht??? 😕
    @yeti ich kann für eine ListControl(CListCtrl) 2 Iconlisten verwenden, weil auch das ListControll ja veschiedene Ansichten unterstützt,
    wie Grosse Symbole, kleine usw. das funktioniert ja auch,
    es sind aber immer die selben Icons, und das will ich ändern!
    mfg
    mirsad



  • Hi,

    das mit den verschiedenen Ansichten hatte ich nicht in dieser Form gewusst - muss ich mal ausprobieren.

    Zun Deinem Problem: Wenn Du neue Elemente (Zeilen) in Dein Listcontrol einfügst, machst Du das doch sicher mit InsertItem, oder?!?

    Dann schau Dir doch mal die dritte und die vierte Definition von InsertItem aus der MSDN an:

    CListCtrl::InsertItem
    int InsertItem( const LVITEM* pItem );

    int InsertItem( int nItem, LPCTSTR lpszItem );

    int InsertItem( int nItem, LPCTSTR lpszItem, int nImage );

    int InsertItem( UINT nMask, int nItem, LPCTSTR lpszItem, UINT nState, UINT nStateMask, int nImage, LPARAM lParam );

    Return Value

    The index of the new item if successful or -1 otherwise.

    Parameters

    pItem

    Pointer to anLVITEM structure that specifies the item’s attributes, as described in the Platform SDK.

    nItem

    Index of the item to be inserted.

    lpszItem

    Address of a string containing the item’s label, or LPSTR_TEXTCALLBACK if the item is a callback item. For information on callback items, see CListCtrl::GetCallbackMask.

    nImage

    Index of the item’s image, or I_IMAGECALLBACK if the item is a callback item. For information on callback items, see CListCtrl::GetCallbackMask.

    nMask

    The nMask parameter specifies which item attributes passed as parameters are valid. It can be one or more of the mask values described inLVITEM structure in the Platform SDK. The valid values can be combined with the bitwise OR operator.

    nState

    Indicates the item's state, state image, and overlay image. See the Platform SDK topics LVITEM for more information andList View Item States for a list of valid flags.

    nStateMask

    Indicates which bits of the state member will be retrieved or modified. See LVITEM in the Platform SDK for more information.

    nImage

    Index of the item’s image within the image list.

    lParam

    A 32-bit application-specific value associated with the item. If this parameter is specified, you must set the nMask attribute LVIF_PARAM.

    Remarks

    Inserts an item into the list view control.

    Fällt Dir was auf? Der Wert, den Du für "nImage" übergibst ist der Index des Bildes aus der ImageListe.... 😉

    Gruss

    yeti



  • Hi, 🙂
    hat recht mit dem InsertItem, und das ist das was mir gefehlt hat, danke, jetzt kann ich die Tasks auf Status abfragen und mit entsprechendem Icon versehen, also danke! 👍
    mfg
    mirsad


Anmelden zum Antworten