listbox mehrspaltig



  • ich habe mit LBS_MULTICOLUMN
    eine listbox mit mehreren Spalten erstellt.
    (eigentlich)
    so richtig will es aber nicht klappen da ich den text in die zweite spalte nicht bekomme weiterhin kann ich nicht diese schönen tabellenköpfe machen.

    kann mir bitte einer sagen wie ich diese "köpfe" hinbekomme und wie ich text in die anderen spalten schreib?

    danke.



  • Nimm mal die suchen funktion mit dem Begriff listview. Dieselbe Frage ist in den letzten 3 Wochen schon mal gestellt worden

    ps: Schau mal hier
    http://www.c-plusplus.net/forum/viewtopic.php?t=49620



  • ich hab bevor ich geschrieben hab schon mal gesucht.
    mit: SendMessage(hwndlb, LB_ADDSTRING, 0, (long)"Ein Inhalt");
    kann ich leider nur immer in eine spalte schreiben.

    was an code danach kommt giebt leider nicht an wie man in die 2. spalte schreibt.



  • das geht nur mit dem ListView, nicht mit der ListBox



  • Hiermit trägst du eine neue Zeile ein

    item.iImage   = ICON_UNKNOWN; // Icon das benutzt werden soll 
      item.pszText  = TextDerAusgegeben werden soll; 
      item.mask     = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM; 
      item.state    = LVIS_FOCUSED|LVIS_SELECTED; 
      item.iSubItem = 0; 
    
      ListView_InsertItem(hLstBox_01,&item); 
      ListView_Scroll( hLstBox_01, 0, 10); 
      item.iItem++; 
      UpdateWindow(hLstBox_01);
    

    Damit trägst du den Text in eine Spalte ein

    line=ListView_GetItemCount(hLstBox_01);
      ListView_SetItemText(hLstBox_01,line,Spalte,buffer1);
    
    hLstBox_01 Handle auf den Listview
    line Zeile in der das passieren soll
    Spalte Die Spalte in der das passieren soll
    buffer1 Der text der ausgegeben werden soll
    


  • das geht mir irgentwie gegen den strich.
    warum soll ich auf listview zurükgreifen wenn ich doch ne listbox habe?
    welcher klasse gehört "item" an?

    gibt es da keine saubere lösung wie ne erweiterung von SendMessage(hwndlb, LB_ADDSTRING, 0, (long)L"Ein Inhalt"); ?



  • Entschuldigung die Definitionen fehlten
    Die ersten zwei Zeilen sind nötig damit er mit Listviews arbeiten kann

    INITCOMMONCONTROLSEX InitControl;
      InitCommonControlsEx(&InitControl);
    
    LV_COLUMN col;
    LV_ITEM item;
    

    Auch wenns gegen den Strich geht, Listboxen sind einspaltig, listviews sidn mehrspaltig, siehe MSDN



  • danke.
    mir wiederstrebte nur mit listviewbefehlen zu arbeiten wenn ich doch ne listbox habe. da bei dir die definition gefehlt hatte dachte ich dein code bezieht sich auf ne box.

    es funzt alles sehr gut.



  • FYI: Mehrspaltigkeit bei ListBoxen bezieht sich mehr auf das Scrollen. Wenn die Items Vertikal nicht mehr in die Liste passen, landen sie in der nächsten Spalte. Irgendwann kannst Du dann horizontal scrollen.



  • ich habe folgendes geschrieben:

    hwndlb = CreateWindow(WC_LISTVIEW,L"",WS_CHILD | WS_VSCROLL | WS_VISIBLE | LVS_LIST,0,0,240,222,hWnd,(HMENU)lb,hInstance,NULL);
    
    			INITCOMMONCONTROLSEX control;
    			LVCOLUMN col;
    			LVITEM item;
    
    			memset(&control,0,sizeof(INITCOMMONCONTROLSEX));
    
    			control.dwICC = ICC_LISTVIEW_CLASSES;
    
    			InitCommonControlsEx(&control);
    
    			memset(&col,0,sizeof(LVCOLUMN));
    
    			memset(&item,0,sizeof(LVITEM));
    
    			col.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;//LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM; 
    			col.fmt=LVCFMT_LEFT;//LVCFMT_LEFT; 
    			col.pszText = L"Spalte 1"; 
    			col.cx = 50; 
    			col.iSubItem = 1; 
    			col.cchTextMax        = 20; 
    			ListView_InsertColumn (hwndlb,1,&col); 
    
    			//Spalte 2 
    			col.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM; 
    			col.fmt=LVCFMT_LEFT; 
    			col.pszText = L"Spalte 2"; 
    			col.cx = 50; 
    			col.iSubItem = 2; 
    			ListView_InsertColumn (hwndlb,2,&col); 
    
    			ShowWindow(hwndlb, SW_SHOW); 
    			UpdateWindow(hwndlb); 
    			item.mask = LVIF_TEXT; 
    			item.iItem = ListView_GetItemCount(hwndlb); 
    			item.iSubItem = 0;
    

    es wird beim compilieren zwar kein fehler angezeigt aber meine list ist lehr.
    es ist einfach nur ein leeres fenster was ich sehe.
    wo liegt der fehler?



  • Lasse iSubItem auf 0 und schmeisse das Flag LVCF_SUBITEM aus der Mask raus. Den Spalten-Index gibst Du ja dann in ListView_InsertColumn an. BTW: Man fängt bei 0 zu zählen an, nicht bei 1.



  • alles klar.
    es geht jetzt.
    hab aber noch ne frage 🙂
    die größe der tabellenköpfe die grau unterlegt sind kann ich noch verändern.
    kann ich deren größe auch absolut machen? (so das man die größe nicht mehr verändern kann)


Anmelden zum Antworten