Icon in CListCtr einfügen [gelöst]
-
Hallo, ich hab das Problem dass mir die Icons nicht angezeigt werden. Kann mir jemand meinen Fehler verraten?
Danke schon mal im Voraus.BOOL CListUebungDlg::CreateList(CWnd* pParent) { CImageList img_List; img_List.Create(16, 16, ILC_COLOR24, 0, 2); HICON icon = LoadIcon(NULL, IDI_QUESTION); HICON icon2 = LoadIcon(NULL, IDI_HAND); img_List.Add(icon); img_List.Add(icon2); int a = img_List.GetImageCount(); m_ctl_List.SetImageList(&img_List, LVSIL_SMALL); m_ctl_List.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT | LVM_SORTITEMS | LVS_REPORT | LVS_EX_SUBITEMIMAGES); m_ctl_List.InsertColumn(0, "abc", LVCFMT_LEFT, 100); m_ctl_List.InsertItem(0, _T("test"), 0); m_ctl_List.InsertItem(1, _T("test2"), 1); //m_ctl_List.SetItemText(0, 0, _T("hallo")); //m_ctl_List.SetItemText(1, 0, _T("hallo")); m_ctl_List.SetItem(0, 0, LVIF_IMAGE, _T(""), 0, 0, 0, 0); m_ctl_List.SetItem(1, 1, LVIF_IMAGE, _T(""), 1, 0, 0, 1); return true; }
-
@Miyutic sagte in Icon in CListCtr einfügen:
Kann mir jemand meinen Fehler verraten?
Kannst du mir deinen Fehler verraten
Achte bitte auf Rückgabewerte der einzelnen Funktionen und schaue was diese zurückgeben. Meistens sind diese sehr hilfreich.
Aber ich sehe was:
HICON icon = LoadIcon(NULL, IDI_QUESTION); HICON icon2 = LoadIcon(NULL, IDI_HAND);
Kann es sein das icon und icon2 NULL ist? Wenn ja, dann rufe mal GetLastError() auf, wie es in der MSDN Doku zu LoadIcon steht.
Aber einen kleinen Tip. Du hast vergessen den hInstance Parameter mit anzugeben. Diesen bekommst du mittels der Funktion AfxGetInstanceHandle().
-
@Quiche-Lorraine sagte in Icon in CListCtr einfügen:
Aber einen kleinen Tip. Du hast vergessen den hInstance Parameter mit anzugeben. Diesen bekommst du mittels der Funktion AfxGetInstanceHandle().
Nö, NULL sollte schon passen. In der Doku steht
A handle to an instance of the module whose executable file contains the icon to be loaded. This parameter must be NULL when a standard icon is being loaded.
Und
IDI_QUESTION
undIDI_HAND
sind standard Icons.
-
@Miyutic sagte in Icon in CListCtr einfügen:
Hallo, ich hab das Problem dass mir die Icons nicht angezeigt werden. Kann mir jemand meinen Fehler verraten?
Danke schon mal im Voraus.BOOL CListUebungDlg::CreateList(CWnd* pParent) { CImageList img_List; img_List.Create(16, 16, ILC_COLOR24, 0, 2); ... m_ctl_List.SetImageList(&img_List, LVSIL_SMALL); ... return true; }
Das kann so nicht gehen.
img_List
ist lokal, d.h.img_List
wird beim Verlassen der Funktion zerstört. Undm_ctl_List.SetImageList(&img_List, LVSIL_SMALL)
kopiert die Image-List halt nicht, sondern referenziert sie nur. Du musst das Objekt als am Leben halten bis zu dem Zeitpunkt wom_ctl_List
zerstört wird.Einfachste Lösung: mach die Image-List zu einem Member der Dialogklasse.
-
Vielen Dank an eure Tipps!
Das mit dem member in der Dlg Klasse war die Lösung, eigentlich simpel aber manchmal sieht man den Wald vor lauter Bäumen nicht mehrWünsche euch nen angenehmen Tag
-
@hustbaer sagte in Icon in CListCtr einfügen [gelöst]:
Und IDI_QUESTION und IDI_HAND sind standard Icons.
Danke für den Hinweis. Das habe ich übersehen.