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
-
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.
-
Das wird über die Extra-Einträge cColumns und puColumns in LVITEM erreicht.
http://msdn.microsoft.com/en-us/library/bb774760(v=VS.85).aspxWenn 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.