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 und IDI_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. Und m_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 wo m_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 mehr 😃

    Wü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.


Anmelden zum Antworten