CListCtrl / CImageList /Steuerelementgröße



  • Hallo,

    ich habe ein kleines Problem mit meinem CListCtrl! Ich habe eine von CListCtrl abgeleitete Klasse. In dieser habe ich eine CImageList in die ich zwei Icons lade.
    In der Funktion INIT initialisiere ich meine CListCtrl-Klasse.

    void CCheckListCtrl::Init()
    {
    	ListView_SetExtendedListViewStyle(m_hWnd, LVS_EX_SUBITEMIMAGES | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
    
    	InsertColumn(0, "", LVCFMT_LEFT, 20);
        InsertColumn(1, "Verfügbar", LVCFMT_RIGHT, 71);
    	InsertColumn(2, "Zutat", LVCFMT_CENTER, 185);
    
    	m_imageList->Create(71,16,ILC_COLOR32|ILC_MASK,0,0);
    	m_imageList->Add(AfxGetApp()->LoadIcon(IDI_ICON_CHECK));
    	m_imageList->Add(AfxGetApp()->LoadIcon(IDI_ICON_CHECKED));
    
    	SetImageList(m_imageList, LVSIL_SMALL);
    }
    

    In meinem Hauptdialog habe ich dem CListCtrl über den Klassenmanager eine Variable vom Typ CCheckListCtrl (meine Klasse) Membervariable zugewiesen.

    Bie UpdateAllViews mache ich folgendes:

    void CCocktailerView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint) 
    {
    	CString strKey;
    
    	m_ListCtrlZutaten.DeleteAllItems();
    
    	GetDocument()->ZutatenGetStartPosition();
    	while(GetDocument()->ZutatenGetNextElement(strKey))
    	{
    		int iAnzahl = m_ListCtrlZutaten.GetItemCount();
    		m_ListCtrlZutaten.InsertItem(iAnzahl, "");
    		m_ListCtrlZutaten.SetItemText(iAnzahl, 1, "");
    		m_ListCtrlZutaten.SetItemText(iAnzahl, 2, strKey);
    	}
    }
    

    Mein Problem ist, dass er hier bereits mein Icon in die erste Spalte zeichnet, obwohl ich das nicht will! Wie bekomme ich dieses blöde Icon aus der 1. Spalte? Auch wenn ich in die anderen Spalten zeichne, bleibt das erste Icon immer. Er nimmt immer das erste Icon aus der ImageList.

    Weiß jemand weiter?

    Vielen Dank, Stefan



  • Setzte die erste Spalte des ListCtrls auf 0 Pixel.

    Devil



  • Ok, das wäre ein workaround 🙂
    Ist das normal, dass in die erste Spalte automatisch das erste Bild aus der ImagesList geladen wird?

    MFG



  • Quatschkopp schrieb:

    Ok, das wäre ein workaround 🙂
    Ist das normal, dass in die erste Spalte automatisch das erste Bild aus der ImagesList geladen wird?

    MFG

    Ka, werd mal zu Hause in meine ListCtrl Klassen gucken...
    Hab da jetzt gerade kein zugriff drauf...

    Devil



  • Jup, danke! Das wäre nett!

    MFG



  • Hm, da deine ImageList ein Pointer ist, wo legst du sie mit new an ?
    Ansonsten kann ich da nix finden.

    Devil



  • Ich leg die ImageList im Konstruktor an. Ich hab's jetzt aber als ganz normale Variable gemacht und da klappt's auch nicht!

    MFG Stefan



  • Hi, habe nochmal ein paar Fragen.

    1. Wenn ich über die CImagesList Bilder in eine Spalte meiner CListCtrl im Report-Modus einfüge, wie kann ich die Bilder dann in der Spalte zentrieren?

    2. Kann man nur herausfinden, welches SubItem angeklickt wurde, wenn man beim ExtendedListViewStyle die Option LVS_EX_FULLROWSELECT mit einbindet? Mich stört, dass ich immer die ganze Zeile markieren muss.

    3. Wie kann man verhindern, dass beim Markieren der ganzen Zeile, die Bilder aus der ImagesList mit markiert werden?

    4. Ich habe die Größe des CListCtrl fest vorgegeben und in zwei Spalten unterteilt. Die erste Spalte ist so breit wie der Beschriftungstext der Spalte (ermittel ich). Die Größe der zweiten Spalte möchte ich so anpassen, dass sie den Rest der CListCtrl ausfüllt. Wie bekomme ich die Größe der CListCtrl? Momentan wird die Aufteilung der Splaten auf unterschiedlichen Computern unterschiedlich angezeigt.

    Viele Grüße, Stefan


Anmelden zum Antworten