listbox mehrspaltig
-
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 kannINITCOMMONCONTROLSEX 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)