ListBox elemente / styles



  • Heiho

    die listbox macht mir raetsel
    und zwar

    mit create window eine listbox erstellt mit diesen styles

    DWORD LBStyle = WS_CHILD|WS_VISIBLE|WS_HSCROLL|WS_VSCROLL|WS_BORDER|LBS_MULTICOLUMN;
    

    und dann

    ::SendMessage(m_Listbox, LB_SETCOLUMNWIDTH, ((rect.right-200)/2), NULL);
    ::SendMessage(m_Listbox, LB_INSERTSTRING, 0, (LPARAM)_T("Zeile 1 Spalte 1"));
    ::SendMessage(m_Listbox, LB_INSERTSTRING, 1, (LPARAM)_T("Zeile 1 Spalte 2"));
    

    nun zu meinen fragen

    1. kann man einfach ein "Report" style machen ? wo man den spalten namen geben kann
    2. wie kann ich strings in die zweite spalte schreiben ?
    3. kann man eine art "gitter" einblenden ?

    {im petzold stehts nix darueber}

    danke schonmal


  • Mod

    Mit der ListBox würde das nur mit Ownerdraw gehen.
    Dafür gibt es das List View Control:
    http://msdn2.microsoft.com/en-us/ms670558.aspx

    Der gute Herr Petzold behandelt die neueren Controls gar nicht!



  • Martin Richter schrieb:

    Der gute Herr Petzold behandelt die neueren Controls gar nicht!

    Das hat mich auch sehr geärgert.


  • Mod

    Welche Version habt ihr denn?
    1. Das erste Buch (Auflage) ist bereits zu Windows 3.0 Zeiten geschrieben worden. Da gab es die einfach nicht!
    2. Es gab eine Neuauflage mit Erweiterungen mit dem Namen "Programming Windows 95". In diesem wird ab Kapitel 12 der entsprechende "Common Control" Teil abgehandelt. IMHO ist diese aber niemals in Deutsch erschienen, aber da mag ich mich irren.

    PS: Ich kaufe grundsätzlich keine technischen Bücher von englischen Autoren, die ins Deutsche übersetzt werden. Hier stehe ich auf Originale. Wenn mir mal ein deutsches (übersetztes) Buch in die Hände fällt lese ich es auch mal, bedauere aber meistens nicht das Original zu haben!
    Ich setze auch keine deutsche Entwicklungsumgebung ein, weil die Übersetzungen meistens übelst sind. Viele Beschreibungen und Tipps und Tricks die englischsprachig sind, sind oft genug einfach nur schlecht zu übertragen.



  • danke euch, mit der lokalen MSDN bekomm ichs denk ich hin

    ich hab den Petzold in der 5. Auflage in deutsch, als entwicklungsumgebung hab ich VS 2003Prof. und VS 2005prof in englisch



  • hab da noch meine schwierigkeiten

    ich erstelle die liste und zeige zwei spalten

    CreateWindow(BlaBlubb);
    
    ListView_SetExtendedListViewStyle(m_LBList, LVS_EX_GRIDLINES);
    
    LVCOLUMN lpcol1;
    lpcol1.mask = LVCF_SUBITEM|LVCF_WIDTH|LVCF_TEXT;
    lpcol1.pszText = _T("First");
    lpcol1.cx = ((rect.right-200)/2);
    lpcol1.iSubItem = 0;
    ListView_InsertColumn(m_LBList, 1, &lpcol1);
    
    LVCOLUMN lpcol2;
    lpcol2.mask = LVCF_SUBITEM|LVCF_WIDTH|LVCF_TEXT;
    lpcol2.pszText = _T("Second");;
    lpcol2.cx = ((rect.right-200)/2);
    lpcol2.iSubItem = 1;
    ListView_InsertColumn(m_LBList, 1, &lpcol2);
    
    // nu die frage wie ich elegant viele eintraege in beide spalten schreiben kann, ich hab nur das rausgefunden:
    
    LVITEM item;
    item.mask = LVIF_TEXT|LVIF_COLUMNS;
    item.pszText = _T("Empty");
    item.iItem = 1;
    item.iSubItem = 0;
    item.cColumns = 0;
    ListView_InsertItem(m_LBList, &item);
    

    1. wie kann ich eintraege in die zweite spalte machen ?
    2. wie kann ich das am elegantesten loesen wenn ich sagen wir 20000 eintraege machen will/muss

    danke



  • hat sich erledigt, war zu blind um
    "ListView_SetItemText" zu finden #gg

    for(int i=0; i<Count; ++i){
        ListView_SetItemText(m_LBList, i, 0, itemFirst[i]);
        ListView_SetItemText(m_LBList, i, 1, itemSecond[i]);
    }
    

    //kurzes beispiel wie ich die liste mit zahlen fuellen lass von 0 bis 2000
    //zuerst ein leeres item hinzufuegen, und dann "beschriften" {=

    LVITEM item;
    item.mask = LVIF_COLUMNS;
    item.iSubItem = 0;
    item.cColumns = 0;
    TCHAR str[200];
    for(int i=0; i<=2000; ++i){
        item.iItem = i;
        ListView_InsertItem(m_LBList, &item);
        swprintf_s(str, 200, _T("%d"), i);
        ListView_SetItemText(m_LBList, i, 0, str);
        ListView_SetItemText(m_LBList, i, 1, str);
    }
    

Anmelden zum Antworten