Column zu einem Listview Window hinzufügen
-
Achso! Naja, für mich reicht es ja, und wer das anders braucht, kann es anders machen.
-
Ich meine wie ich es hinbekomme damit es etwa wie folgt aussieht:
http://www.bilder-space.de/upload/zXw2p2dBs9tSJmf.PNG
Kann mir jemand sagen wie das geht?
-
Also, so kann das in WM_CREATE aussehen:
case WM_CREATE: InitCommonControls(); hFileView = CreateWindow (WC_LISTVIEW, "", WS_CHILD | WS_VISIBLE | LVS_REPORT | LVS_SHOWSELALWAYS, 15, 70, 470, 299, hMain, (HMENU) LISTVIEW, g_hInst, NULL); InsertListViewColumn (hFileView, "Datei", 210); InsertListViewColumn (hFileView, "Größe", 70, ListView_SetExtendedListViewStyle (hFileView, LVS_EX_FULLROWSELECT); return 0;
-
@BitWax: Bei deinem CreateWindow ist noch nicht mal ein Name als Klasse angegeben worden, wie soll das funktionieren?
Verwendet ihr VisualC++? Vielleicht könnt ihr euch dadurch Arbeitsschritte sparen?!
-
WC_LISTVIEW ist der Name der Klasse!? Der 1. Parameter bezeichnet die Window-Klasse, so geht das!!!
EDIT: vllt. postest du einfach mal deinen Code, damit man nicht immer rumraten muss.
-
AH! Danke!

Ich hab die ganze Zeit nur "LISTBOX" als Klassennamen verwendet
Super jetzt geht`s
Vielen Dank an alle
-
... -.-
-
Ich bräuchte noch mal eine kleine Hilfe:
wie erreicht man es ein Item hinzuzufügen und dies über mehrere Columns hinweg?Beispiel:
--------------------------- | Dateiname | Größe | --------------------------- | Item 1 | 19 KB | <- "Wie krieg ich den Text '19 KB' in`s 2. Column?" | | | ---------------------------
-
bool InsertListViewEntry (HWND hListView, LPTSTR lpEntryValue, int iRowID, int iColID) { static int iEntry = 0; LV_ITEM lvi; lvi.mask = LVIF_TEXT; lvi.pszText = lpEntryValue; lvi.iItem = iRowID; lvi.iSubItem = iColID; if (iColID == 0) ListView_InsertItem (hListView, &lvi); else ListView_SetItem (hListView, &lvi); ++iEntry; return true; }iRowID -> Nummer des Columns (Zählung beginnt bei 0
)
iColID -> Nummer der SpalteEDIT: Beispiel:
InsertListViewEntry (hListview, "Datei.exe", 0, 0); InsertListViewEntry (hListview, "200KB", 1, 0);
-
danke für die Hilfe

PS: war allerdings ein kleiner Denkfehler drin ^^
bool InsertListViewEntry (HWND hListView, LPTSTR lpEntryValue, int iRowID, int iColID) { static int iEntry = 0; LV_ITEM lvi; lvi.mask = LVIF_TEXT; lvi.pszText = lpEntryValue; lvi.iItem = iColID; lvi.iSubItem = iRowID; if (iRowID == 0) ListView_InsertItem (hListView, &lvi); else ListView_SetItem (hListView, &lvi); ++iEntry; return true; }iColID und iRowID waren an zwei Stellen vertauscht

-
Waren sie nicht...ich war bloß eben zu blöd das oben richtig zu beschreiben. "Col" wie Column und eben Row. also sry für den Fehler in meiner Beschreibung
-
Macht ja nix, danke trotzdem für das Beispiel

Aber noch ne andere Frage:
wenn ich als Window-Class keinen Text sondern z.B. WC_LISTVIEW oder TRACKBAR_CLASS verwende funktioniert der Teil mit WM_COMMAND nicht mit diesem Fenster?
Wie kann ich denn sonst die Window-Events abfragen?
-
über WM_NOTIFY. dafür musst du aber einmal die MSDN bemühen, da ich keine Lust habe nur Code zu posten

-
Alles klar, hat auch ganz gut funktioniert, danke

Aber ich hätte noch zwei Fragen:
1.)
Ich hab die ganze "Win32 Programmers Reference" nach ListViews durchsucht und nichts gefunden um die CursorPosition zu verändern bzw. abzufragen. Ich dachte erst es geht auch mit LB\_GETCURSEL aber für LVM\_... gibts sowas nicht
2.)
Gibt es sowas wie z.B. 'LVS_FULLROWSELECTION' um die gesammte Zeile anzucklicken?
-
zu 1.: meinst du welches Item gerade ausgewählt ist?
ListView_GetSelectionMark (hClientListView)damit kannst du die ID des markierten Eintrages bekommen
zu 2. ja:ListView_SetExtendedListViewStyle (hFileView, LVS_EX_FULLROWSELECT);
-
Bei beiden Funktionsaufrufen (ListView_GetSelectionMark, ListView_SetExtendedListViewStyle)
kommt die Fehlermeldung: "undefined reference to 'WinMain@16'"
In welcher DLL stehen denn diese Funktionen vielleicht kann ich diese einfach mit einbinden?!
-
hmmm...also da kann ich nicht helfen, das Problem hatte ich noch nie. Welchen Compiler/IDE benutzt du denn?
EDIT: hast du InitCommonControl aufgerufen? (müsstest du aber eigentlich, weil sonst würdest du ja kein ListView sehen)
-
GCC, also GNU Compiler Collection mit DevC++ als IDE,
warscheinlich verwendest du VisualC++ nicht war?
Diese beiden Funktionen sind auch nicht in meiner Win32 Programmer`s Reference aufgeführt
-
Nein, ich benutze CodeBlocks. Allerdings nur zum coden. Zum compilieren benutze ich den Borland Compiler.
Ich habe die Reference auch, ich kann aber nicht sagen, warum das dort nicht drin steht. Vllt. weiß ja jmd. ob es einen neue bzw. vollständigere Version davon gibt.
-
OK, aber wenn ich die neuste Reference habe compiliert er trotzdem nicht besser.
Ich werde mal versuchen eine DLL zu linken, die winmm.dll für die Funktion mciSendString musste ich auch mit einbinden