CListview



  • Hallo,
    kann mir jemand sagen, wie ich die Spalten einer Listview füllen kann?
    Ich habe mir jetzt eine Listview mit einer zusätzlichen Spalte erstellt.
    Bekomme aber nichts hinein....



  • Guck dir mal die Member an:
    InsertColumn
    InsertItem
    SetItemText
    (SetItemData)

    Mein Beispiel kann ich leider nicht weggeben. 😞



  • m_ctlList.InsertColumn(0, _T("PLAYERNAME"), LVCFMT_LEFT);
    m_ctlList.InsertItem(0, "HAllo"); //Erste Spalte
    m_ctlList.InsertItem(1, "HAllo"); //Erste Spalte
    CListCtrl* pm_ctlList; //geht nicht gibt Fehler
    pm_ctlList->SetItemText(1, 1, "Test"); //geht nicht gibt Fehler

    So hab ich das versucht geht allerdings nicht.

    Weiß jemand wieso?

    wofür steht eigentlich die Ziffer beim Insertitem? m_ctlList.InsertItem(0, "HAllo"); also hier die Null ?

    Hab mir die Befehle bereits angeschaut komme leider trotzdem nicht weiter....



  • ExtremeSnail² schrieb:

    m_ctlList.InsertColumn(0, _T("PLAYERNAME"), LVCFMT_LEFT);
    m_ctlList.InsertItem(0, "HAllo"); //Erste Spalte
    m_ctlList.InsertItem(1, "HAllo"); //Erste Spalte
    CListCtrl* pm_ctlList; //geht nicht gibt Fehler
    pm_ctlList->SetItemText(1, 1, "Test"); //geht nicht gibt Fehler

    Richtige Kommentierung der Zeilen:
    // Erste Spalte
    // Erste Zeile
    // Zweite Zeile
    // Variable anlegen, schön, aber wodrauf zeigt der Zeiger?
    // Klar, der Zeiger ist NULL und das Feld 1,1 gibt es nicht, weil du nur eine Spalte hast.

    Die Zahl beim InsertItem ist die Zeilennummer!

    Hast du wirklich in die MSDN geschaut?



  • m_ctlList.InsertColumn(1, _T("PLAYERNAME"), LVCFMT_LEFT); //Soll 2. Spalte anlegen
    m_ctlList.InsertItem(0, "HAllo"); //Erste Zeile der ersten Spalte
    m_ctlList.InsertItem(1, "HAllo"); //Zweite Zeile der ersten Spalte
    m_ctlList.SetItemText(0,1, "TEXT"); //Text kommt nicht, soll aber zweite Spalte erste Zeile sein, ich raff das nicht wieso das nicht geht...

    Ja wo genau muss ich denn bei MSDN suchen das was cih fiedn hilft mir nicht.



  • msdn suche

    1. zuerst du machen Columns
    2. fügst du item ein

    3. die zusätzlichen spalten gehören deinem Item, also musst du subItems dem Item zufügen.

    MSDN ist auch ein bspl.

    hoffe das kann helfen wenn nicht schau ich mal



  • Ich probier jetzt auch aus, bin soweit mit meinem Projekt.



  • Geht wunderbar, dein Quelltext:

    m_lscOrte.InsertColumn(0, _T("Spalte1"), LVCFMT_LEFT); //Soll 2. Spalte anlegen 
    	m_lscOrte.InsertColumn(1, _T("Spalte2"), LVCFMT_LEFT); //Soll 2. Spalte anlegen 
    	m_lscOrte.InsertItem(0, "HAllo"); //Erste Zeile der ersten Spalte 
    	m_lscOrte.InsertItem(1, "HAllo"); //Zweite Zeile der ersten Spalte 
    	m_lscOrte.SetItemText(0,1, "TEXT"); //Text kommt nicht, soll aber zweite Spalte erste Zeile sein, ich raff das nicht wieso das nicht geht...
    

    Keine Ahnung, was du falsch machst.



  • Ja jetzt geht der bei mir auch.

    Ich musste in den EIgenschaften auf Bericht stellen anstatt auf Liste.

    Und wie mache cih das jetzt, wenn ein Elemente der einen Spalte ausgewählt ist das alle ander auch ausgewählt werden in den adneren Spalten also eine komplette Zeile ausgewählt wird?



  • Dazu fällt mir LVN_FULLROWSELECT ein, bei dem Teil vor dem _ bin ich mir aber nicht sicher.

    Ich muss auch nochmal gucken, bis gleich.

    PS: Wenn wir so weiter machen, haben wir bald einen schönen Leitfaden... 😃



  • Ja man könnte aus dem Ergebnis später mal ein Tutorial sonst machen.

    Übrigens vielen Dank für deine Hilfe.
    Werde diese eventuell noch häufiger brauchen *gg+





  • Das versteh ich nun nicht wie ich das einsetzen muss mit dem fullrowselect..

    Kansnt du mir da nochmal helfen, wo füge ichd enn nun was genau ein?
    Habs mir angeschaut aber plan das nicht....



  • So, nun habe ich es geschafft die ganze Zeile zu markieren.
    Kann mir noch jemand dabei helfen, wie man herausfindet welches Element gerade markiert ist?



  • Hmm, ausnahmsweise gibt es eine Lösung, nur mit kritischen Stellen ausgexxxxt:

    void xxxxxx::OnItemchangedLstMain(NMHDR* pNMHDR, LRESULT*
    pResult)
    {
     NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
     int nItem = pNMListView->iItem;
    
     if(pNMListView->uChanged & LVIF_STATE)
     {
      if(LVIS_SELECTED & pNMListView->uNewState)
      {
       if(LVIS_FOCUSED & pNMListView->uNewState)
       {
         // Diese Zeile ist markiert!
       }
      }
     }
    
     *pResult = 0;
    }
    


  • Hi,

    Du das versteh ich nicht ganz. Was passiert denn da?
    Ich möchte das ja möglichst verstehen und nicht nur einbauen.

    Was wird denn zurückgegeben ein Integerwert?
    Weil ich wollte das so mache, das ich erstmal feststelle welche Zeile markiert ist, um diese dann zu löschen oder zu ändern...
    Ich hatte mir gedacht, das man es eventuell so macht das man versucht herauszubekommen welchen Index die markierte Zeile gerade hat.

    Wieso schreibst du eigentlich Kritische Stellen?
    Programmierst du richtig professionell und darfst deinen Code nicht freigeben?
    Nur so aus Interesse nachgefragt...



  • Ich beantworte die letzte Frage einfach mal zuerst:
    Ich arbeite als Softwareentwicklerin.

    Der Code, den ich dir geschickt habe, ist so weit, wie du ihn sehen kannst, allgemeingültig und nix geheimes. Ich habe nur die Teile rausgenommen, die Projektspezifisch sind.

    Der Schnipsel stammt aus einer Sammlung, die ich mir gemacht habe, weil ich mit der GUI nicht so klar komme. Ich bin da eher Liebhaberin der Daten(bank)schicht.

    Und gerade weil ich das nicht verstehe, kann ich dir den Schnipsel nicht erklären. Ich habe nr herausgefunden, dass ich genau mit dem Code was mit dem markierten Element machen kann.

    Den GUI Kram muss ich jetzt leider auch lernen, aber ich bin noch nicht so weit. Ganz schlimm wird es, wenn ich ans Drucken komme. Da habe ich keinen Schimmer, aber das ist noch ne Weile hin.

    Hast du die Funktion denn eingebaut bekommen? Denn die Funktion ist nur die halbe Miete... aber du forscht ja gerne 😉



  • Und ich dachte schon, das geht mit GetSelectionMark() 🤡



  • hmm, könnte...

    Vielleicht war das eine Lösung für eventuelle Sonderfälle...

    *grübel*

    Ich glaube, da war was in der Art, wegen sofort reagieren der so. Könnte sein. Aber ich hab ja gesagt, bin nicht so fit. 😞



  • So, jetzt habe ich auch eine Frage:

    Kann man die Breite eines Listcontrol herausbekommen? Ich habe immer Ärger mit den Spaltenbreiten, weil ich das erstmal ausprobieren muss, bis es passt. Das finde ich unschön.


Anmelden zum Antworten