ListView Tile



  • Hi,
    ich habe gerade gelesen, dass der TileView beim ListView-Control keine Subitems unterstützt. Stimmt das?
    Wenn ja, wie bekommt man dann so ein Control hin?

    http://i.msdn.microsoft.com/dynimg/IC13638.png

    Mfg, Martek


  • Mod

    So ist es. Subitems gibt es nur im Stil LVS_REPORT!



  • Ja aber wie sollte man dann so ein Control hinbekommen? Das ist das Bild, das Microsoft auf MSDN als Beispiel für einen TileView anzeigt.


  • Mod

    Das wird über die Extra-Einträge cColumns und puColumns in LVITEM erreicht.
    http://msdn.microsoft.com/en-us/library/bb774760(v=VS.85).aspx

    Wenn Du einfach die MSDN Doku liest kanst Du exakt das entsprechende Beispiel nachlesen in LVN_GETDISPINFO:
    http://msdn.microsoft.com/en-us/library/bb774818(v=VS.85).aspx



  • Okay, ich hab mir die Seiten jetzt angeguckt, aber ich kriegs nicht hin.
    Ich zeig euch mal ein paar teile meines Codes:

    Tile-View Setting

    ListView_SetView(hListView, 0x4); // LV_VIEW_TILE
        LVTILEVIEWINFO tvi;
        tvi.cbSize = sizeof(LVTILEVIEWINFO);
        tvi.dwFlags = LVTVIF_FIXEDSIZE;
        tvi.dwMask = LVTVIM_COLUMNS | LVTVIM_TILESIZE;
        tvi.cLines = 2;
        SIZE size = {392, 50};
        tvi.sizeTile = size;
        ListView_SetTileViewInfo(hListView, &tvi);
    
        LVCOLUMN lvc;
        ListView_InsertColumn(hListView, 0, &lvc);
        ListView_InsertColumn(hListView, 1, &lvc);
        ListView_InsertColumn(hListView, 2, &lvc);
    

    Item hinzufügen

    LVITEM lvi;
        lvi.mask = LVIF_TEXT | LVIF_COLUMNS;
        lvi.pszText = LPSTR_TEXTCALLBACK;
        lvi.iSubItem = 0;
        lvi.cColumns = 3;
        lvi.iItem = 0;
        lvi.puColumns = new UINT[3];
        lvi.puColumns[0] = 1;
        lvi.puColumns[1] = 2;
        lvi.puColumns[2] = 3;
        ListView_InsertItem(hListView, &lvi);
    
        LVITEM lviSub;
        lviSub.iItem = 0;
        lviSub.mask = LVIF_TEXT | LVIF_COLUMNS;
        lviSub.iSubItem = 1;
        lviSub.pszText = LPSTR_TEXTCALLBACK;
        ListView_InsertItem(hListView, &lviSub);
        lviSub.iSubItem = 2;
        lviSub.pszText = LPSTR_TEXTCALLBACK;
        ListView_InsertItem(hListView, &lviSub);
    

    Und der Notify teil

    case WM_NOTIFY:
        switch(((LPNMHDR)lParam)->code == NM_CUSTOMDRAW)
        {
            case LVN_GETDISPINFO:
                NMLVDISPINFO* plvdi = (NMLVDISPINFO*)lParam;
                switch(plvdi->item.iSubItem)
                {
                    case 0:
                        plvdi->item.pszText = "Item1";
                        break;
                    case 1:
                        plvdi->item.pszText = "SubItem1";
                        break;
                    case 2:
                        plvdi->item.pszText = "SubItem2";
                        break;
                }
                break;
        }
        break;
    

    Wie gesagt sehe ich rein garnichts. Vielleicht kann mir ja jemand weiter helfen.
    Vielen dank schonmal 🙂



  • switch(((LPNMHDR)lParam)->code == NM_CUSTOMDRAW)
    

    Was bezweckst du mit dieser Zeile Code?

    switch(((LPNMHDR)lParam)->code){
    		case LVN_GETDISPINFO:
    

    So könnnte es klappen. Den Rest hab ich mir jetzt nicht angeschaut. Btw Strukturen wie "LVTILEVIEWINFO tvi" und "LVITEM lvi" würde ich vor dem Füllen immer mit "0" inizialisieren.



  • Oh man, stimmt 😃
    Das war noch von voherigen Tests drin. Habs rausgenommen, das ändert aber nichts.


Anmelden zum Antworten