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übermfg
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" abhalt 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