GetColumnWidth und SetColumnWidth Problem



  • Hi,

    hab da ne kleine Wissenslücke ^^. Vll kann mir wer sagen wie ich im folgenden Code in der 2. Spalte sagen kann das wenn der Inhalt der Spalten kleiner ist als der Spaltenheader er auf den Spaltenheader vergrößert und wenn der Spalteninhalt größer ist als der Spaltenheader er auf den Spalteninhalt vergrößert?

    . 
    . 
    . 
    
       m_Datenliste.InsertColumn(0,"Marke"); 
       m_Datenliste.InsertColumn(1,"Modell"); 
       while(!r->IsEOF()) 
       { 
          r->GetFieldValue("Marken.Name",val); 
          CString insert = val.pbVal; 
          int q = m_Datenliste.InsertItem(0,insert); 
          insert = ""; 
          val.Clear(); 
          val =""; 
    
          r->GetFieldValue("Modell",val); 
          insert = val.pbVal; 
          m_Datenliste.SetItemText(q,1,insert); 
          insert = ""; 
          val.Clear(); 
          val =""; 
    
          r->MoveNext(); 
    
          m_Datenliste.SetColumnWidth(0,LVSCW_AUTOSIZE); 
          m_Datenliste.SetColumnWidth(1,LVSCW_AUTOSIZE); 
       } 
    . 
    . 
    .
    

    Also auf den Spaltenheader vergrößern geht mit

    m_Datenliste.SetColumnWidth(1,LVSCW_AUTOSIZE_USEHEADER);
    

    , dass weiss ich, aber den Rest weiss ich jetzt nicht.

    Wäre nett wenn mir wer helfen könnt...

    Und wie kann ich den Header nicht zentriert sondern links- oder rechtsbündig anzeigen lassen? Wenn ich

    m_Datenliste.InsertColumn(1,"Modell",LVCFMT_RIGHT,0);
    

    schreibe dann macht er nur den Inhalt der Spalten rechtsbündig aber nicht den Header.



  • Also ich hab es so probiert, dass ich die Spalten des CListCtrl in einer Schleife erzeugt habe:

    const CString strTitles[] = {"Spalte_1", "Spalte_2", "Spalte_3"};
    // Anzahl der Spalten
    const int iColumns = 3;
    // Breite der einzelnen Spalten in Zeichen
    const int iWidth[] = {18,12,12}; // das sind nur Beispielwerte

    // Information zum aktuellen Font
    TEXTMETRIC tm;

    CClientDC dc(this);
    int aveCharWidth=0;

    if(dc.GetTextMetrics(&tm)==TRUE)
    // durchschnittliche Breite eines Zeichens des aktuellen Fonts --> für korrekte Bestimmung der Spaltenbreiten:
    aveCharWidth = tm.tmAveCharWidth;

    // Titeltexte und Spaltenbreite in Pixel setzen
    for(int i=0;i<iColumns;i++){
    // alle Spalten mit den Überschriften einfügen: 1. + 3. Spalte linksbündig, 2. Spalte zentriert
    if(i==1)
    m_ctrListe.InsertColumn(i,strTitles[i],LVCFMT_CENTER,-1,i);
    else
    m_ctrListe.InsertColumn(i,strTitles[i],LVCFMT_LEFT,-1,i);
    // Spaltenbreiten verändern:
    m_ctrListe.SetColumnWidth(i,iWidth[i]*aveCharWidth);
    }

    Hoffe, es hilft. 🙂

    Gruß, seppelina



  • Reschpekt ^^, dein 2. Beitrag in diesem Forum und gleich ein so guter 🕶 . Ja denke schon das mir das hilft...

    matsch sanks 😉


Anmelden zum Antworten