Listbox



  • hi,

    Kann ich mit einer Listbox mehrere Spalten machen und über jeder Spalte jeweils eine Leiste mit Titel? Wenn ja, wie? Wenn nein, mit welcher anderen windowclass?
    Danke

    cu blue



  • Kann dir morgen 25.07 dazu ein Beispiel liefern. Komme heute nicht mehr an meinen Source dran



  • ListView



  • Hiermit erzeuge ich einen Listview mit 3 Spalten
    in der ersten ein Icon, die 2. fürs Datum und die Dritte für Text
    Bei Fragen die Hilfe des Visual C/C++ Compilers hilft jetzt glaube ich weiter,
    da du jetzt einen Einsprung darin hast.

    static int USR_HISTORYVIEWER_GenHistWindow_ETZ(HMODULE  hInst,HWND hDlg,HWND *hListView)
    {
      HIMAGELIST     hSmall;
      HIMAGELIST     hImage;
      LV_COLUMN      col;
      LV_ITEM        item;
    
      *hListView = CreateWindowEx(WS_EX_CLIENTEDGE, WC_LISTVIEW, "",
      WS_CHILD | WS_BORDER | WS_VISIBLE |
      WS_VSCROLL | LVS_REPORT | LVS_NOLABELWRAP |
      LVS_SINGLESEL | LVS_ICON | LVS_EDITLABELS,
      6,270,
      618,233,
      hDlg,NULL,NULL/*HInst*/,0);
    //Spalte 1
      col.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM | LVCF_IMAGE;
      col.fmt=LVCFMT_LEFT | LVCFMT_COL_HAS_IMAGES ;
      col.pszText = (char*)"S";
      col.cx =(int)(24);
      col.iSubItem = 1;
      col.cchTextMax        = NORMSTRINGLEN;
      col.iImage            = -1;
      ListView_InsertColumn (*hListView,1,&col);
    //Spalte 2
      col.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
      col.fmt=LVCFMT_LEFT;
      col.pszText = (char*)"Zeit";
      col.cx =(int)(70);
      col.iSubItem = 2;
      ListView_InsertColumn (*hListView,2,&col);
     //Spalte 3
      col.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
      col.fmt=LVCFMT_LEFT;
      col.pszText = (char*)"Comment";
      col.cx =(int)(705);
      col.iSubItem = 3;
      ListView_InsertColumn (*hListView,3,&col);
    
      ShowWindow  (*hListView, SW_SHOW);
      UpdateWindow(*hListView);
      item.mask = LVIF_TEXT;
      item.iItem = ListView_GetItemCount(*hListView);
      item.iSubItem = 0;
    
      hImage = ImageList_Create(32, 32, ILC_COLOR8 | ILC_MASK, 1, 1);
      hSmall = ImageList_Create(16, 16, ILC_COLOR8 | ILC_MASK, 5, 1);
    
      ImageList_AddIcon(hSmall, LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON_ATP)));
      ImageList_AddIcon(hSmall, LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON_CAL)));
      ImageList_AddIcon(hSmall, LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON_ENG)));
      ImageList_AddIcon(hSmall, LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON_CMT)));
      ImageList_AddIcon(hSmall, LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON_ERROR)));
      ImageList_AddIcon(hSmall, LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON_ST1)));
      ImageList_AddIcon(hSmall, LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON_ST2)));
      ImageList_AddIcon(hSmall, LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON_ST3)));
      ImageList_AddIcon(hSmall, LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON_NONE)));
      ListView_SetImageList(*hListView, hImage, LVSIL_NORMAL);
      ListView_SetImageList(*hListView, hSmall, LVSIL_SMALL);
      return PASS;
    }
    

    Hiermit trage ich eine Zeile in solch einen Listview ein

    int Imago;  //eine int von 0..7 die eines der oben geladenen Bilder 
    auswählt
    LV_ITEM        item;
    char szBuffer1[NORMSTRINGLEN]={""};
    char szBuffer2[NORMSTRINGLEN]={""};
    char szBuffer3[NORMSTRINGLEN]={""};
    
    //szBuffer3 ist leer
    item.iItem = ListView_GetItemCount(hListView);
    item.pszText=szBuffer3;
    item.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM;
    item.state =LVIS_FOCUSED|LVIS_SELECTED;
    item.iSubItem = 0; // Spaltenauswahl
    item.iImage =  Imago; // Bildauswahl
    ListView_InsertItem(hListView,&item);
    //Texte szBuffer1 Datum
    //Texte szBuffer2 Text
    ListView_SetItemText(hListView,item.iItem,1,szBuffer1);
    ListView_SetItemText(hListView,item.iItem,2,szBuffer2);
    

    Ich hoffe es hilft 😋



  • Danke für die ausführliche Antwort!!! 🙂 🙂 🙂
    Es hat geholfen!!! 👍



  • hi,

    Leider hab ich doch noch ein Problem. Wie kann ich einen Item in eine andere Spalte einfügen?

    Mein Code:

    /*ListView erstellen*/
    hList = CreateWindowEx(VS_EX_FLATSB,WC_LISTVIEW,NULL,WS_VISIBLE|WS_CHILD|WS_BORDER|WS_VSCROLL|LVS_SHOWSELALWAYS|LVS_SINGLESEL|LVS_REPORT|LVS_NOLABELWRAP|LVS_NOSORTHEADER,	,0,700,250,hWnd,NULL,hInstance,NULL);
    
    /*Spalten einfügen*/
    LVCOLUMN Column;
    Column.mask = LVCF_TEXT|LVCF_WIDTH|LVCF_FMT|LVCF_SUBITEM|LVCF_ORDER;
    Column.fmt = LVCFMT_CENTER;
    Column.cx = 50;
    Column.pszText = "Status";
    Column.cchTextMax = strlen("Status");
    Column.iOrder = 0;
    Column.iSubItem = 0;
    ListView_InsertColumn(hList, 0, &Column);
    Column.cx = 500;
    Column.pszText = "Name";
    Column.cchTextMax = strlen("Name");
    Column.iOrder = 1;
    Column.iSubItem = 1;
    ListView_InsertColumn(hList, 1, &Column);
    Column.cx = 150;
    Column.pszText = "IP";
    Column.cchTextMax = strlen("IP");
    Column.iOrder = 2;
    Column.iSubItem = 2;
    ListView_InsertColumn(hList, 2, &Column);
    
    /*Items einfügen*/
    LVITEM Item;
    Item.mask = LVIF_TEXT;
    Item.iItem = 1;
    Item.iSubItem = 0;
    Item.pszText = "Hallo";
    Item.cchTextMax = strlen("hallo");
    ListView_InsertItem(hList, &Item);
    /*Item in die 2Spalte <<-- wird nicht angezeigt*/
    Item.iItem = 1;
    Item.iSubItem = 1;
    ListView_InsertItem(hList, &Item);
    

    Danke



  • Schau dich mal in der MSDN-Library um: Using List-View Controls - da ist auch ein Beispiel



  • Schau die mal das Stück Code an

    item.iItem = ListView_GetItemCount(hListView);           // Hole Anzahl der Zeilen in Listbox
    item.pszText=szBuffer3;
    item.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM;
    item.state =LVIS_FOCUSED|LVIS_SELECTED;
    item.iSubItem = 0;
    item.iImage =  Imago;
    //Bild
    ListView_InsertItem(hListView,&item);                    // Füge eine Zeile an, hier auch gleichzeitig füllen 
                                                             // mit Bild in  Spalte 0
    //Texte
    ListView_SetItemText(hListView,item.iItem,1,szBuffer1);  // Fülle Spalte 1 deshalb die 1 in szBuffer1 steht 
                                                             //der Text den ich eintagen möchte
    ListView_SetItemText(hListView,item.iItem,2,szBuffer2);  // Fülle Spalte 2 deshalb die 2 ....
    

    😮 Wie gut das es kein Help und keine Beispiele gibt 🙄


Anmelden zum Antworten