Column zu einem Listview Window hinzufügen



  • 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 Spalte

    EDIT: 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



  • "undefined reference to 'WinMain@16'"

    --> Schonmal geguckt was du für ein Projekt eingestellt hast? (Konsole oder Fenster Applikation?)
    Ich glaube daran lag 's...
    Meine Dev C++ Zeiten liegen aber schon lange zurück 😃



  • Nein ich habe eine WIndowsApplikation, allerdings hatte ich den Teil mit "#if 0" ausgeklammert, jetzt mekkert der Compiler: "'ListView_GetSelectionMark' undeclared".
    Er findet die Funktion also erst gar nicht als wöre sie nicht vorhanden.
    Ich habe folgende Header eingebunden:

    #include <windows.h>
    #include <mmsystem.h>
    #include <commctrl.h>

    Fehlt da vielleicht noch eine?



  • also ich habe auch nur den 1. und den 3. header. Aber ich habe noch cw32mt.lib mitgelinkt, wobei die für etwas anderes bei mir gebraucht wird...



  • Wo finde ich denn diese Datei? In System32?



  • ne, die musst du irgendwo unter deinen Compiler-Einstellungen hinzufügen.


Anmelden zum Antworten