Eine Checkbox in einer Listbox als Element der Listbox plazieren?



  • Tag allerseits,

    ist es moeglich, eine Checkbox als Element einer Listbox hinzuzufuegen?

    gruss
    v R



  • Glaube die Listbox macht das nicht mit. Beim ListView gehts schon.



  • Ah, sehr gut, danke. Aber wie genau funktioniert das? Ich erstelle eine
    Listview mit dem Style LVS_EX_CHECKBOXES und LVS_SINGLESEL. Nur wie
    fuege ich jetzt eine Checkbox der Liste hinzu?

    Ich habe mir mal einen Wrapper gebaut, der macht folgendes:

    void ListView::add(HWND handle, const string_type& text) {
        LVITEM new_item;
        ListViewItem* new_listview_item = new ListViewItem;
    
            memset(&new_item, 0, sizeof(LVITEM));
    	new_item.mask = LVIF_STATE | LVIF_TEXT;
    	new_item.iItem = items.size() + 1;
    	new_item.pszText = (LPWSTR)text.c_str();
    
    	new_listview_item->key = reinterpret_cast<size_t>(handle);
    	new_listview_item->caption = text;
    	new_listview_item->item = new_item;
    
    	items.push_back(new_listview_item);
    	item_it = items.begin();
    
    	ListView_InsertItem(hwnd(), &new_listview_item->item);
    }
    

    ListViewItem ist eine eigene Struktur und dient lediglich zur internen Daten-
    haltung. Wenn ich ein Element auf diese Art und Weise hinzufuege, dann hab
    ich das Problem, dass es nicht als Checkbox-Element hinzugefuegt wird,
    der entsprechende Style ist allerdings gesetzt, was hab ich uebersehen?

    gruss
    v R



  • Ok, also das letzte Problem hab ich nun behoben, es reicht nicht, den Style
    fuer die Checkboxes beim Erstellen anzugeben, man muss es danach explizit
    setzen.

    Jetzt hab ich aber noch eine Frage, wenn die Liste in einer Spalte voll ist,
    dann geht er hin und faengt an, neue Elemente in die naechste Spalte einzutragen.

    Ist es moeglich, dass die immer untereinander angeordnet sind und er nicht
    automatisch eine neue Spalte anfaengt?

    gruss
    v R


  • Mod

    virtuell Realisticer schrieb:

    Jetzt hab ich aber noch eine Frage, wenn die Liste in einer Spalte voll ist,
    dann geht er hin und faengt an, neue Elemente in die naechste Spalte einzutragen.

    Ist es moeglich, dass die immer untereinander angeordnet sind und er nicht
    automatisch eine neue Spalte anfaengt?

    Das verstehe ich nicht! Hast Du mehrere Spalten?
    Das ListCtrl fängt gar nichts an von selbst in neue Spalten und Zeilen zu übertragen.



  • Martin Richter schrieb:

    virtuell Realisticer schrieb:

    Jetzt hab ich aber noch eine Frage, wenn die Liste in einer Spalte voll ist,
    dann geht er hin und faengt an, neue Elemente in die naechste Spalte einzutragen.

    Ist es moeglich, dass die immer untereinander angeordnet sind und er nicht
    automatisch eine neue Spalte anfaengt?

    Das verstehe ich nicht! Hast Du mehrere Spalten?
    Das ListCtrl fängt gar nichts an von selbst in neue Spalten und Zeilen zu übertragen.

    Ich hab mich wahrscheinlich nur falsch ausgedrueckt. Habe ich so viele Elemente
    hinzugefuegt, dass der sichtbare Bereich voll ist, dann faengt er an, neben
    dem ersten Element das neue Elementen hinzuzufuegen (ist ja quasi die neue
    Spalte).

    Ich liefere mal besser einen Screenshot 😉 :

    http://img221.imageshack.us/img221/2782/guiproblemcv9.jpg

    Ich haette gern, dass man die Elemente einfach untereinander einfuegt und
    ggf. eine vertikale Scrollbar erzeugt wird.

    gruss
    v R


  • Mod

    Setze den Stil LVS_REPORT und nicht LVS_LIST



  • Martin Richter schrieb:

    Setze den Stil LVS_REPORT und nicht LVS_LIST

    Das hab ich auch schon versucht, allerdings werden dann die Elemente nicht
    mehr hinzugefuegt. Muss ich dann den Code zum Hinzufuegen der Elemente noch
    irgendwie aendern?

    gruss
    v R


  • Mod

    Dann musst Du mindestens eine Spalte hinzufügen mit ListView_InsertColumn



  • Martin Richter schrieb:

    Dann musst Du mindestens eine Spalte hinzufügen mit ListView_InsertColumn

    Super geil, so funktionierts, danke!

    gruss
    v R


Anmelden zum Antworten