Column-Überschrift Abfragen (CListCtrl)



  • ich brauch mal n kleinen denkanstoß.
    was ist hier falsch?

    LV_COLUMN lvc;
    c_lstList.GetColumn(3, &lvc);
    
    CString v_sColumnHeader;
    v_sColumnHeader = lvc.pszText;
    

    es gibt keine fehlermeldung, aber bei

    v_sColumnHeader = lvc.pszText;
    

    stürzt der kompiler ab

    wenn ich das hier versuche:

    v_sColumnHeader = (CString)lvc.pszText;
    

    bekomme ich "".
    liegt der fehler in dieser übergabe, oder mach ich vorher schon was falsch?



  • Kopiere mal den pszText Text mittels

    strcpy(...);
    

    in eine CString Variable...


  • Administrator

    Also erstens, die Struktur heisst LVCOLUMN.
    Zweitens sollte man vielleicht eine Überprüfung reinsetzen:

    if(lvc.mask & LVCF_TEXT)
    {
        // ...
    }
    

    Und drittens, versuch mal dies hier:

    v_sColumnHeader.Format(_T("%s"), lvc.pszText);
    

    Grüssli



  • danke. hab ich gemacht, die fehlermeldung sieht zwar jetzt anders aus, aber der fehler ist immer noch der selbe.

    im debug hab ich folgende werte:
    lvc = {...} was mich etwas irritiert

    lvc.mask = 4
    lvc.pszText = 0xcccccccc "" bzw. CXX0030: Fehler: "Ausdruck kann nicht ausgewertet werden"

    aber diese zeile ist doch richtig? oder?

    c_lstList.GetColumn(3, &lvc);
    

    ps. LVCOLUMN ersetzt die alte LV_COLUMN unter vc6 geht beides.


  • Administrator

    Ach ich hab grad in der MSDN nachgeschaut. Sorry ... Fehler ...

    Die mask wird anderst verwendet, als ich dachte. Sie definiert, was du holen willst, bzw. bei SetColumn setzen willst.

    Also korrekt wäre es:

    LVCOLUMN lvc;
    lvc.mask = LVCF_TEXT;
    
    c_ListCtrl.GetColumn(3, &lvc);
    

    Die Überprüfung kannst dann weglassen. Sorry, mein Fehler. Ist etwas her, dass ich das letzte mal LVCOLUMN verwendet habe ^^

    Grüssli



  • ja, so hab ich mir das auch gedacht, aber es funzt nich.

    das das setzen der überschriften klappt, hab ich mal versucht sie direkt danach wieder abzufragen:

    LVCOLUMN lvc;
    lvc.mask = LVCF_TEXT | LVCF_WIDTH;
    lvc.cx = 80;
    lvc.pszText = "Wert";
    c_ListCtrl.InsertColumn(3, &lvc);
    lvc.pszText = "Parmeter";
    c_ListCtrl.InsertColumn(7, &lvc);  //soweit gehts
    
    lvc.mask = LVCF_TEXT;
    c_ListCtrl.GetColumn(3, &lvc); //lvc.pszText wird nicht aktualisiert
    

  • Administrator

    hast du jetzt das 3 und das 7 nur als Beispiel gemacht, oder ist das wirklich so? Also hast du keine Kolonne von 0 bis 2 und von 4 bis 6? Dann wäre nämlich dein GetColumn aufruf falsch. Die Kolonne 3 wird nämlich in deinem Beispiel an die Position 0 gestetzt und die Kolonne 7 an die Position 1. Kannst du auch erkennen über den Rückgabewert von InsertColumn. Somit kann GetColumn(3, ...) gar nicht funktionieren, da an der Stelle 3 gar keine Kolonne ist.

    Grüssli



  • Bei mir gehts.



  • klar hat jede column eine überschrift (hab nur die als bsp herausgezogen)



  • jemand noch ne idee, was ich noch falsch machen könnte?



  • Versuch das mal:

    LVCOLUMN lc;
    lc.mask = LVCF_TEXT;
    char szBuffer[100];
    lc.cchTextMax = 100;
    lc.pszText = szBuffer;
    
    c_ListCtrl.GetColumn( 0, &lc );
    


  • Hallo,
    @Airdamn, dein Vorschlag funktioniert, der hier auch:

    TCHAR lpBuffer[256];
    HDITEM hdItem;
    hdItem.mask = HDI_TEXT;
    hdItem.pszText = lpBuffer;
    hdItem.cchTextMax = 256;
    CString csstr;
    pListCtrl->GetHeaderCtrl()->GetItem(1,&hdItem);
    csstr = hdItem.pszText;
    

    was einem lieber ist 😕

    lg
    pixel


Anmelden zum Antworten