ListView erstellen



  • na, du musst für InitCommonControlsEx noch die comctl32.lib mitlinken!



  • Ja, das wollte ich auch schon machen, aber ich finde die nicht. Wo kann man die denn her beziehen oder erzeugen???



  • ... oder erzeugen

    😃

    Die sind beim MSCV++ dabei oder zu lädst sie mit dem PSDK runter

    M.T.



  • Schau einfach in die Anleitung deines Compilers wie das geht. 🕶



  • Original erstellt von mirkos:
    Ja, das wollte ich auch schon machen, aber ich finde die nicht. Wo kann man die denn her beziehen oder erzeugen???

    Die sind beim DevCpp dabei.
    Wenn eine library laut MSDN name.lib heißt, so heißt sie beim DevCpp libname.a
    In diesem Fall musst du also die libcomctl32.a linken. Das machst du in den Projektoptionen.



  • So,
    ich hab's jetzt mit der libcomctl32.a und mit der comctl32.lib versucht. Und beides funktioniert nicht. Ich bekomme folgende Meldung:

    C:\...\api.cpp
    [Warning] In function `struct HWND__ * CreateListView(HWND__ *, HINSTANCE__ *)':
    31 C:\...\api.cpp
    implicit declaration of function `int InitCommonControlsEx(...)'
    25 C:\...\api.cpp
    `INITCOMMONCONTROLSEX' undeclared (first use this function)
    (Each undeclared identifier is reported only once
    for each function it appears in.)
    25 C:\...\api.cpp
    parse error before `;'
    29 C:\...\api.cpp
    `icex' undeclared (first use this function)
    31 C:\...\api.cpp
    implicit declaration of function `int InitCommonControlsEx(...)'
    

    Vielleicht währe es möglich, dass mir jemand ein Beispielcode gibt?
    Danke.

    mfg

    [ Dieser Beitrag wurde am 25.11.2002 um 20:18 Uhr von mirkos editiert. ]



  • Hast du die Headerdatei "commctrl.h" auch eingebunden?



  • Ja, natürlich.



  • Ok, hab gerade mal nachgeschaut. Beim Dev-C++ musst du noch eine Konstante definieren, damit du die Funktion InitCommonControlsEx benutzen kannst. Schreib mal bevor du die Headerdateien einbindest:

    #define _WIN32_IE 0x0300
    


  • Es geht! Vielen Dank an alle noch mal. Und für die die sich auch dafür interessieren (das Design ist vielleich nicht so gut, weil ich mich da noch nicht so auskenne):
    Dev-C++: Die „libcomctl32.a“ bei den Projektoptionen einbinden:

    #include <windows.h>
    
    #define _WIN32_IE 0x0300
    #include <commctrl.h>
    
    HWND hwndListe;
    HINSTANCE hThisInstance;
    LRESULT CALLBACK WindowProcedure(HWND, UINT, WPARAM, LPARAM);
    char szClassName[ ] = "Window";
    
    int WINAPI WinMain(HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil)
    {
    static HINSTANCE hInstanceList;
    static int i, iCol;
    static char *szText[3] = {"Field1","Field2", "Field3"};
    static int szTextColWidth[3] = {50,50,50};
    static LVCOLUMN lvc;
    
    int index;
    LV_ITEM lvI;
    LV_ITEM lvSI;
    
    ... (WinMain usw.)
    
    //List View erstellen:
    INITCOMMONCONTROLSEX ictrlex;
    ictrlex.dwSize       = sizeof(INITCOMMONCONTROLSEX);
    ictrlex.dwICC        = ICC_LISTVIEW_CLASSES;
    InitCommonControlsEx(&ictrlex);
    
    hwndListe = CreateWindow(WC_LISTVIEW, "",WS_CHILD | WS_BORDER | WS_VISIBLE |
    LVS_EDITLABELS | LVS_SORTASCENDING | LVS_REPORT,
    5, 5, 150 , 300, hwnd, (HMENU)ID_LISTVIEW, hThisInstance, NULL);
    
    lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM; 
    for (iCol = 0; iCol < 3; iCol++) 
    { 
      lvc.iSubItem = iCol+1;
      lvc.pszText = szText[iCol];   
      lvc.cx = szTextColWidth[iCol];     // width of column in pixels
      lvc.fmt = LVCFMT_LEFT;  // left-aligned column
    
      ListView_InsertColumn(hwndListe, iCol, &lvc); 
    }
    
    //Daten einfügen, 1. Spalte (items):
    
    // Some code to create the list-view control.
    // Initialize LVITEM members that are common to all items. 
    lvI.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM | LVIF_STATE; 
    lvI.state = 0; 
    lvI.stateMask = 0; 
    
    // Initialize LVITEM members that are different for each item. 
    for (index = 0; index < 3; index++)
    {
        lvI.iItem = index;
        lvI.iImage = index;
        lvI.iSubItem = 0;
        lvI.pszText = "MMM";
    
        if(ListView_InsertItem(hwndListe, &lvI) == -1) 
        MessageBox (NULL, "ListView" , "Fehler", 0);
    }
    
    lvSI.mask = LVIF_TEXT | LVIF_STATE; 
    lvSI.state = 0; 
    lvSI.stateMask = 0; 
    
    // Daten einfügen, weiter Spalten (subitems):
    for (index = 1; index < 3; index++)
    {
        lvSI.iItem = 2;
        lvSI.iSubItem = index;
        lvSI.pszText = "AAaa";
    
        if(ListView_SetItem(hwndListe, &lvSI) == -1)    
        MessageBox (NULL, "ListView" , "Fehler", 0);
    }
    
    //...oder...
    
    //Text einfügen, weiter Spalten (subitems):
    ListView_SetItemText(hwndListe, 2 ,2 ,"AA");
    

    :

    Falls jemand einen Fehler findet, bitte sofort schreiben.
    mfg


Anmelden zum Antworten