Dela via


Om List-View-kontrollen

Se kontrollexemplet virtual listview.

En listvykontroll är ett fönster som visar en samling objekt. Listvykontroller ger flera sätt att ordna och visa objekt och är mycket mer flexibla än simpla listrutor. Ytterligare information om varje objekt kan till exempel visas i kolumner till höger om ikonen och etiketten.

List-View Stilar och vyer

Listvisningskontroller kan visa objekt i fem olika vyer. Kontrollens fönsterstil anger standardvyn. Ytterligare fönsterformat anger justering av objekt och kontrollspecifika funktioner. I följande tabell beskrivs vyerna.

Visningsnamn Beskrivning
Ikon vy Anges av LVS_ICON fönsterformat eller genom att skicka LV_VIEW_ICON med meddelandet LVM_SETVIEW. Varje objekt visas som en ikon i full storlek med en etikett under. Användaren kan dra objekten till valfri plats i listvisningsfönstret.
Liten ikonvy Anges av LVS_SMALLICON fönsterformat eller genom att skicka LV_VIEW_SMALLICON med LVM_SETVIEW. Varje objekt visas som en liten ikon med etiketten till höger om det. Användaren kan dra objekten till valfri plats.
Listvy Anges av LVS_LIST fönsterstil eller genom att skicka LV_VIEW_LIST med LVM_SETVIEW. Varje objekt visas som en liten ikon med en etikett till höger om det. Objekt ordnas i kolumner och användaren kan inte dra dem till en godtycklig plats.
Rapport (detaljer) vy Anges av LVS_REPORT fönsterstil eller genom att skicka LV_VIEW_DETAILS tillsammans med LVM_SETVIEW. Varje objekt visas på sin egen rad, med information ordnad i kolumner. Kolumnen längst till vänster lämnas alltid befogad och innehåller den lilla ikonen och etiketten. Efterföljande kolumner innehåller underelement som specificeras av applikationen. Varje kolumn har en rubrik, såvida du inte också anger LVS_NOCOLUMNHEADER fönsterformat.
Kakelvy Version 6 och senare. Specificeras genom att skicka LV_VIEW_TILE tillsammans med LVM_SETVIEW. Varje objekt visas som en ikon i full storlek med en etikett på en eller flera rader bredvid.

 

Följande skärmdumpar använder vyer för att visa olika mängder information om vart och ett av sju husdjur. Vyerna visar hur informationen kan visas i Windows Vista. Kontrollens visuella formatmallar har ställts in på temat "Explorer" med hjälp av SetWindowTheme.

Följande skärmbild visar informationsvyn.

skärmbild som visar information i fem kolumner och sju rader

Följande skärmbild visar ikonvyn.

skärmbild som endast visar namnet på varje husdjur och en ikon som anger arten

Följande skärmbild visar listvyn.

skärmbild som för varje husdjur visar en stor ikon bredvid texten i husdjurets namn, ras och pris

Följande skärmbild visar panelvyn.

kakelvy.

Du kan ändra vytypen när du har skapat en listvykontroll. Om du vill hämta och ändra fönsterformatet använder du funktionerna GetWindowLong och SetWindowLong. Om du vill fastställa fönsterformaten för den aktuella vyn använder du värdet LVS_TYPEMASK.

Du kan styra hur objekt ordnas i ikon eller liten ikonvy genom att ange antingen LVS_ALIGNTOP (standard) eller LVS_ALIGNLEFT fönsterformat.

Du kan ändra justeringen när du har skapat en listvykontroll. Använd värdet LVS_ALIGNMASK för att fastställa den aktuella justeringen.

Ytterligare fönsterformat innehåller andra alternativ, till exempel om en användare kan redigera etiketter eller välja fler än ett objekt i taget. En fullständig lista finns i List-View fönsterformat.

Utökade List-View formatmallar

De utökade kontrollformaten för listvyn innehåller alternativ som kryssrutor, platta rullningslister, rutnätslinjer och snabbspårning. En fullständig lista finns i Extended List-View Styles. Du kommer inte åt utökade listvyformat på samma sätt som standardfönsterformat. Du använder inte funktionerna GetWindowLong och SetWindowLong för att göra utökade formatändringar.

Det finns två meddelanden som anger och hämtar utökad formatinformation, LVM_SETEXTENDEDLISTVIEWSTYLE och LVM_GETEXTENDEDLISTVIEWSTYLE. I stället för att uttryckligen skicka meddelanden kan du använda följande motsvarande makron: ListView_SetExtendedListViewStyle, ListView_SetExtendedListViewStyleExoch ListView_GetExtendedListViewStyle.

Formatmall för virtuell List-View

En virtuell listvy är en listvykontroll som har LVS_OWNERDATA stil. Denna stil möjliggör att kontrollen kan hantera miljontals objekt eftersom ägaren får ansvaret för att hantera objektdata. På så sätt kan du använda den virtuella listvisningskontrollen med stora databaser med information, där specifika metoder för dataåtkomst redan finns på plats.

En virtuell listvykontroll har mycket lite objektinformation i sig. Förutom objektval och fokusinformation måste kontrollens ägare hantera all objektinformation. Andra processer begär objektinformation från ägaren med hjälp av LVN_GETDISPINFO meddelandekoder.

Eftersom den här typen av listkontroll är avsedd för stora datamängder rekommenderar vi att du cachelagrade begärda objektdata för att förbättra hämtningsprestandan. Listvyn innehåller en mekanism för cachetips som hjälper dig att optimera cachen. Tipset implementeras i form av en LVN_ODCACHEHINT meddelandekod.

Skapa en virtuell List-View-kontroll

Du skapar virtuella listvykontroller med hjälp av funktionen CreateWindow eller CreateWindowEx och anger LVS_OWNERDATA-fönsterformatet som en del av funktionsparametern dwStyle. Dynamisk växling till och från LVS_OWNERDATA formatmall stöds inte.

Du kan använda formatmallen LVS_OWNERDATA i kombination med de flesta andra fönsterformat, förutom LVS_SORTASCENDING eller LVS_SORTDESCENDING formatmall. Alla kontroller för virtuell listvy är standard för formatmallen LVS_AUTOARRANGE.

Om du vill att objekt ska kunna visas i listan måste du först skicka LVM_SETITEMCOUNT-meddelandet, antingen explicit eller med hjälp av ListView_SetItemCountEx makro.

Följande meddelanden stöds inte i formatet LVS_OWNERDATA: LVM_ENABLEGROUPVIEW, LVM_GETITEMTEXT, LVM_SETTILEINFOoch LVM_MAPIDTOINDEX.

Kompatibilitetsproblem

Alla fyra formatmallarna i listvyn – ikon, liten ikon, lista och rapportvy – stöder LVS_OWNERDATA formatmall. Listvisningskontroller som har formatmallen LVS_OWNERDATA lagrar inte någon objektspecifik information. Därför är de enda giltiga objekttillståndsflaggor som du kan använda för ett objekt LVIS_SELECTED och LVIS_FOCUSED. Ingen annan tillståndsinformation lagras. Listvisningskontrollen underhåller inte tillstånds- eller överläggsbilder för varje objekt, i synnerhet. Du kan dock låta listvisningskontrollen fråga ditt program om dessa bilder genom att skicka ett LVM_SETCALLBACKMASK meddelande.

De flesta listvykontrollmeddelanden och associerade makron stöds fullt ut. Vissa meddelanden har dock begränsningar eller stöds inte när du använder LVS_OWNERDATA formatmallen. I följande tabell sammanfattas de berörda meddelandena.

Meddelande Begränsning
LVM_ARRANGE Stöder inte formatmallen LVA_SNAPTOGRID.
LVM_DELETEALLITEMS Anger antalet objekt till noll och rensar alla interna urvalsvariabler, men det tar faktiskt inte bort några objekt. Det gör ett meddelandeåteranrop.
LVM_DELETEITEM Stöds endast för urvalsintegritet och tar inte bort ett objekt.
LVM_GETITEMSTATE Returnerar endast fokus- och markeringstillstånd (d.s. de tillstånd som lagras av listvisningskontrollen).
LVM_GETNEXTITEM Stöder inte sökvillkoren för listvyn LVNI_CUT, LVNI_HIDDENeller LVNI_DROPHILITED. Alla andra kriterier stöds.
LVM_GETWORKAREAS Stöds inte.
LVM_INSERTITEM Stöds endast för urvalsintegritet.
LVM_SETITEM Stöds inte. Om du vill ange objekttillståndet använder du meddelandet ListView_SetItemState.
LVM_SETITEMCOUNT Anger antalet objekt som för närvarande finns i listan. Om listvisningskontrollen skickar ett meddelande som begär data för ett objekt upp till den högsta uppsättningen, måste ägaren vara beredd att ange dessa data. Meddelandeparametrarna stöder kontroller för virtuell listvy.
LVM_SETITEMPOSITION Stöds inte.
LVM_SETITEMSTATE Tillåter endast att markeringen och fokustillstånden ändras för objektet.
LVM_SETITEMTEXT Stöds inte. Det är programmets ansvar att underhålla objekttexterna.
LVM_SETWORKAREAS Stöds inte.
LVM_SORTITEMS Stöds inte. Det är programmets ansvar att presentera objekten i önskad ordning.

 

Hantering av meddelandekoder för virtuell List-View-kontroll

Listvisningskontroller med formatet LVS_OWNERDATA skickar samma meddelandekoder som andra listvisningskontroller och ytterligare två: LVN_ODCACHEHINT och LVN_ODFINDITEM. Följande är de vanligaste meddelandena som listvisningskontrollen med LVS_OWNERDATA formatmallen skickar.

Anmälan Beskrivning
LVN_GETDISPINFO En virtuell listvykontroll har mycket lite objektinformation på egen hand. Därför skickar den ofta LVN_GETDISPINFO meddelandekod för att begära objektinformation. Det här meddelandet hanteras på ungefär samma sätt som återuppringningsobjekt i en standardlistkontroll. Eftersom antalet objekt som stöds av kontrollen kan vara mycket stort, förbättrar cachelagring av objektdata prestanda. När du hanterar LVN_GETDISPINFO försöker kontrollens ägare först ange begärd objektinformation från cachen (mer information finns i Cache Management). Om det begärda objektet inte cachelagras måste ägaren vara beredd att ange informationen på annat sätt.
LVN_ODCACHEHINT En virtuell listvy skickar LVN_ODCACHEHINT-meddelandekoden för att optimera cachen. Meddelandekoden innehåller inkluderande indexvärden för ett intervall med objekt som rekommenderas att cachelagras. När du tar emot meddelandekoden måste ägaren vara beredd att läsa in cacheminnet med objektinformation för det begärda intervallet så att informationen blir lättillgänglig när ett LVN_GETDISPINFO meddelande skickas.
LVN_ODFINDITEM LVN_ODFINDITEM-meddelandekoden skickas av en virtuell listvykontroll när kontrollen behöver ägaren för att hitta ett visst återanropsobjekt. Meddelandekoden skickas när listvisningskontrollen tar emot snabbnyckelåtkomst eller när den tar emot ett LVM_FINDITEM meddelande. Sökinformation skickas i form av en LVFINDINFO- struktur, som är medlem i NMLVFINDITEM- struktur. Ägaren måste vara beredd att söka efter ett objekt som matchar den information som anges av listvisningskontrollen. Ägaren returnerar objektets index om det lyckas eller -1 om inget matchande objekt hittas.

 

Cachehantering

En listvykontroll med formatmallen LVS_OWNERDATA skapar ett stort antal LVN_GETDISPINFO meddelandekoder och, för att optimera cachen, ett LVN_ODCACHEHINT meddelande. LVN_ODCACHEHINT meddelanden innehåller information om de rekommenderade objekt som ska inkluderas i cacheminnet. Dessa meddelanden skickas som WM_NOTIFY meddelanden, med värdet lParam som adress för en NMLVCACHEHINT- struktur.

Strukturen NMLVCACHEHINT innehåller två heltalsmedlemmar, iFrom och iTo, som representerar de inkluderande slutpunkterna för ett antal objekt som troligen kommer att behövas. Ägaren måste vara beredd att läsa in cachen med objektinformationen för vart och ett av objekten inom det rekommenderade intervallet.

Listkontrollen behöver ofta objektinformation för det första objektet (förskjutning 0). LVN_ODCACHEHINT-meddelandekoden kanske inte alltid innehåller objekt 0, men den måste alltid ingå i cacheminnet.

De sista objekten i listan används ofta. Därför kanske ägaren vill behålla en andra cache som innehåller objekten i slutet av listan. Det begärda intervallet från LVN_ODCACHEHINT kan kontrolleras mot slutcachen för att göra det tillgängligt automatiskt i stället för att läsa in samma slutintervall varje gång.

List-View arbetsytor

Listvisningskontroller stöder arbetsytor, som är rektangulära virtuella områden som listvisningskontrollen använder för att ordna sina objekt. Ett arbetsområde är inte ett fönster och kan inte ha en synlig kantlinje. Som standard har listvisningskontrollen inga arbetsytor. Genom att skapa ett arbetsområde kan du skapa en tom kantlinje till vänster, överst eller till höger om objekten eller göra så att en vågrät rullningslist visas när det normalt inte skulle finnas någon.

När ett arbetsområde skapas blir objekt som ligger inom arbetsytan medlemmar i arbetsytan. På samma sätt blir ett objekt medlem i ett arbetsområde om det flyttas till arbetsområdet. Om ett objekt inte ligger inom något arbetsområde blir det automatiskt medlem i den första (index 0) arbetsytan. Om du vill placera nytt objekt inom ett visst arbetsområde måste du först skapa objektet och sedan använda antingen LVM_SETITEMPOSITION eller LVM_SETITEMPOSITION32-meddelandet för att flytta det till önskat arbetsområde.

Följande bild är ett exempel på en listvykontroll som innehåller fyra arbetsområden, var och en i en annan kvadrant i klientområdet.

skärmbild av en listvykontroll med ett arbetsområde i varje kvadrant i klientområdet

Flera arbetsytor kan användas för att skapa olika områden i en vy. Du kan skapa områden i en enda vy som har olika betydelser. En vy över ett filsystem kan till exempel ha ett område för läs/skriv-filer och ett annat område för skrivskyddade filer. Användaren kan kategorisera objekt genom att placera dem i olika arbetsområden. Om en fil flyttas till det skrivskyddade området blir den automatiskt skrivskyddad.

Flera arbetsytor kan korsas, men alla objekt som ligger i skärningspunkten blir medlemmar i området med det lägre indexet. Därför är det bäst att undvika denna situation. När du sorterar flera arbetsytor sorteras objekten jämfört med de andra objekten i samma arbetsyta.

Antalet arbetsytor kan hämtas med meddelandet LVM_GETNUMBEROFWORKAREAS. Arbetsytorna ändras med meddelandet LVM_SETWORKAREAS och kan hämtas med meddelandet LVM_GETWORKAREAS. Båda dessa meddelanden tar adressen till en matris med RECT strukturer som lParam och antalet RECT- strukturer som wParam. De vänstra och övre element i dessa strukturer anger koordinaterna för arbetsområdets övre vänstra hörn (ursprunget), och högra och nedre element anger koordinaterna för det nedre högra hörnet i arbetsområdet. Alla koordinater finns i klientkoordinaterna i listvyn. Det maximala antalet tillåtna arbetsytor definieras av värdet LV_MAX_WORKAREAS.

Att ändra arbetsytan påverkar inte listvisningskontroller som har LVS_LIST eller LVS_REPORT vy, men arbetsytorna behålls när vytypen ändras. Med vyerna LVS_ICON och LVS_SMALLICON kan arbetsytan ändras för att ändra hur objekten visas. Om du gör bredden på arbetsytan (höger - vänster) större än kontrollens klientbredd, kommer objekten att omslutas med den bredden och den vågräta rullningslisten visas. Om arbetsytans bredd blir smalare än bredden på kontrollens klientområde blir objekten omslutna i arbetsytan och inte i klientområdet. Genom att sätta vänstra eller övre medlem till ett positivt värde, kommer artiklarna att visas med början vid arbetsytan, vilket skapar ett tomt utrymme mellan kontrollens kant och artiklarna. Ett tomt utrymme kan också skapas mellan kontrollens högra kant och objekten genom att göra arbetsytans bredd mindre än kontrollens klientbredd.

List-View Bildsamlingar

Som standard visar en listvykontroll inte objektbilder. Om du vill visa objektbilder måste du skapa bildlistor och associera dem med kontrollen. En listvykontroll kan ha tre bildlistor:

  • En bildlista som innehåller fullstora ikoner som visas när kontrollen är i ikonvyn.
  • En bildlista som innehåller små ikoner som visas när kontrollen är i liten ikonvy, listvy eller rapportvy.
  • En bildlista som innehåller tillståndsbilder, som visas till vänster om den fullstora eller lilla ikonen. Du kan använda tillståndsbilder, till exempel markerade och avmarkerade kryssrutor, för att ange programdefinierade objekttillstånd. Tillståndsbilder visas i ikonvy, liten ikonvy, listvy och rapportvy.

De stora och små ikonbildlistorna kan också innehålla överläggsbilder, som är utformade för att ritas transparent över objektikonerna.

Så här använder du överläggsbilder i en listvykontroll:

  1. Anropa funktionen ImageList_SetOverlayImage för att tilldela ett överläggsbildindex till en bild i bildlistorna med full storlek och liten ikon. En överläggsbild identifieras av ett enbaserat index.
  2. Du kan associera ett överläggsbildindex med ett objekt när du anropar makrot ListView_InsertItem eller ListView_SetItem. Använd makrot INDEXTOOVERLAYMASK för att ange ett överläggsbildindex i medlemmen för läget i objektets LVITEM--struktur. Du måste också ange LVIS_OVERLAYMASK bitar i stateMask medlem.

Om en tillståndsbildlista anges reserverar en listvykontroll utrymme till vänster om varje objekts ikon för en tillståndsbild.

Om du vill associera en tillståndsbild med ett objekt använder du makrot INDEXTOSTATEIMAGEMASK för att ange ett tillståndsbildsindex i tillståndsmedlemmen i LVITEM-struktur. Indexet identifierar en bild i kontrollens tillståndsbildlista. Även om bildlisteindex är nollbaserade använder kontrollen enbaserade index för att identifiera tillståndsbilder. Ett tillståndsbildindex på noll anger att ett objekt inte har någon tillståndsbild.

När en listvykontroll förstörs förstörs som standard de avbildningslistor som tilldelats den. Men om en listvykontroll har LVS_SHAREIMAGELISTS fönsterstil är programmet ansvarigt för att förstöra avbildningslistorna när de ej längre behövs. Du bör ange det här formatet om du tilldelar samma bildlistor till flera listvisningskontroller. Annars kan fler än en kontroll försöka förstöra samma bildlista.

List-View objekt och underdelar

Varje objekt i en listvykontroll har en ikon, en etikett, ett aktuellt tillstånd och ett programdefinierat värde. Genom att använda listvymeddelanden kan du lägga till, ändra och ta bort objekt samt hämta information om objekt.

Varje objekt kan ha en eller flera underelement. En delobjekt är en sträng som i rapportvyn visas i en kolumn separat från objektets ikon och etikett. Om du vill ange texten i en underpost använder du meddelandet LVM_SETITEMTEXT eller LVM_SETITEM. Alla objekt i en listvykontroll har samma antal underelement. Antalet underelement bestäms av antalet kolumner i listvisningskontrollen. När du lägger till en kolumn i en listvykontroll anger du dess associerade underwebbplatsindex.

Strukturen LVITEM definierar ett listvyobjekt eller underobjekt. iItem medlem är objektets nollbaserade index. Den iSubItem- medlem är det enbaserade indexet för en underwebbplats eller noll om strukturen innehåller information om ett objekt. Ytterligare medlemmar anger objektets text, ikon, tillstånd och objektdata. Objektdata är ett programdefinierat värde som är associerat med ett listvyobjekt.

Om du vill lägga till ett objekt i en listvykontroll använder du LVM_INSERTITEM-meddelandet och anger adressen för en LVITEM- struktur. Innan du lägger till flera objekt kan du skicka kontrollen ett LVM_SETITEMCOUNT meddelande och ange antalet objekt som kontrollen slutligen ska innehålla. Det här meddelandet gör det möjligt för listvisningskontrollen att omfördela sina interna datastrukturer bara en gång i stället för varje gång du lägger till ett objekt. Du kan fastställa antalet objekt i en listvykontroll med hjälp av meddelandet LVM_GETITEMCOUNT. Om du lägger till ett stort antal objekt i en listvykontroll kan du påskynda processen genom att inaktivera återritning innan du lägger till objekten och sedan aktivera återritning när objekten har lagts till. Använd meddelandet WM_SETREDRAW för att aktivera och inaktivera omrrakning.

Om du vill ändra attributen för ett listvyobjekt använder du LVM_SETITEM-meddelandet och anger adressen för en LVITEM- struktur. Den maskmedlemmen i den här strukturen specificerar de objektattribut som du vill ändra. Om du till exempel bara vill ändra texten i ett objekt eller underobjekt använder du meddelandet LVM_SETITEMTEXT.

Om du vill hämta information om ett listvyobjekt använder du LVM_GETITEM-meddelandet och anger adressen till den LVITEM- struktur som ska fyllas i. Den maskmedlemmen i den här strukturen anger de objektattribut som ska hämtas. Om du bara vill hämta ett objekts eller underobjekts text använder du meddelandet LVM_GETITEMTEXT.

Om du vill ta bort ett listvyobjekt använder du meddelandet LVM_DELETEITEM. Du kan ta bort alla objekt i en listvykontroll med hjälp av meddelandet LVM_DELETEALLITEMS.

List-View objekttillstånd

Ett objekts tillstånd är ett värde som anger objektets tillgänglighet, anger användaråtgärder eller på annat sätt återspeglar objektets status. En listvykontroll ändrar vissa tillståndsbitar, till exempel när användaren väljer ett objekt. Ett program kan ändra andra tillståndsbitar för att inaktivera eller dölja objektet eller för att ange en överläggsbild eller tillståndsbild. Mer information om överläggsbilder och tillståndsbilder finns i List-View bildlistor.

Ett objekts tillstånd anges av tillstånd medlem i LVITEM- struktur. När du specificerar eller ändrar ett objekts tillstånd, specificerar medlemmen för stateMask vilka tillståndsbitar du behöver ändra. Du kan ändra ett objekts tillstånd med hjälp av meddelandet LVM_SETITEMSTATE. Du kan ange ett objekts tillstånd när du skapar det eller när du ändrar dess attribut med hjälp av LVM_SETITEM meddelande. Om du vill fastställa ett objekts aktuella tillstånd använder du meddelandet LVM_GETITEMSTATE eller LVM_GETITEM.

Om du vill ange ett objekts överläggsbild måste stateMask medlem i LVITEM- struktur innehålla LVIS_OVERLAYMASK-värdet, och tillstånd medlem måste inkludera det enbaserade indexet för överläggsbilden som flyttats vänster 8 bitar med hjälp av INDEXTOOVERLAYMASK makro. Indexet kan vara noll om du inte vill ange någon överläggsbild.

Om du vill ange ett objekts tillståndsbild måste stateMask medlem i LVITEM- struktur innehålla LVIS_STATEIMAGEMASK-värdet, och tillstånd medlem måste inkludera ett baserat index för tillståndsbilden som flyttats åt vänster 12 bitar med hjälp av INDEXTOSTATEIMAGEMASK makro. Indexet kan vara noll om du inte vill ange någon tillståndsbild.

Återanropsobjekt och återanropsmasken

För vart och ett av dess objekt lagrar en listvykontroll vanligtvis etiketttexten, bildlistindexet för objektets ikoner och en uppsättning bitflaggor för objektets tillstånd. Du kan definiera återanropsobjekt eller ändra kontrollens återanropsmask för att indikera att programmet, i stället för kontrollen, lagrar en del av eller all den här informationen. Du kanske vill använda återanrop om programmet lagrar en del av den här informationen.

Ett återanropsobjekt i en listvykontroll är ett objekt som programmet lagrar textindexet, ikonindexet eller båda för. Du kan definiera återanropsobjekt när du skickar LVM_INSERTITEM meddelande för att lägga till ett objekt i listvisningskontrollen. Om programmet lagrar texten för objektet eller underobjektet, ställer du in medlemmens pszText i objektets LVITEM struktur till LPSTR_TEXTCALLBACK. Om programmet lagrar ikonindexet för ett objekt anger du iImage medlem i objektets LVITEM- struktur till I_IMAGECALLBACK.

Den återanropsmasken för en listvykontroll är en uppsättning bitflaggor som anger de objekttillstånd som programmet i stället för kontrollen lagrar aktuella data för. Återanropsmasken gäller för alla kontrollobjekt, till skillnad från återanropsobjektets beteckning, som gäller för ett specifikt objekt. Återanropsmasken är noll som standard, vilket innebär att listvisningskontrollen lagrar all information om objekttillstånd. När du har skapat en listvykontroll och initierat dess objekt kan du skicka LVM_SETCALLBACKMASK meddelande för att ändra återanropsmasken. Om du vill hämta den aktuella återanropsmasken skickar du meddelandet LVM_GETCALLBACKMASK.

När en listvykontroll måste visa eller sortera ett listvyobjekt som programmet lagrar återanropsinformation för skickar kontrollen LVN_GETDISPINFO meddelandekod till kontrollens överordnade fönster. Det här meddelandet anger en NMLVDISPINFO- struktur som innehåller den typ av information som krävs och identifierar objektet eller underwebbplatsen som ska hämtas. Det överordnade fönstret måste bearbeta LVN_GETDISPINFO för att tillhandahålla begärda data.

Om listvisningskontrollen identifierar en ändring i ett objekts återanropsinformation, till exempel en ändring i text-, ikon- eller tillståndsinformationen, skickar kontrollen en LVN_SETDISPINFO meddelandekod för att meddela dig om ändringen.

Om du ändrar ett återanropsobjekts attribut eller tillståndsbitar använder du meddelandet LVM_UPDATE för att tvinga kontrollen att uppdatera objektet. Det här meddelandet gör också att kontrollen automatiskt ordnar sina objekt om den har stilen LVS_AUTOARRANGE. Du kan använda LVM_REDRAWITEMS-meddelandet för att rita om ett intervall med objekt genom att ogiltigförklara motsvarande delar av listvisningskontrollens klientområde.

Genom att effektivt använda återanropsobjekt och återanropsmasken kan du se till att varje objektattribut endast underhålls på ett ställe. Detta kan förenkla ditt program, men det enda utrymme som sparas är det minne som annars skulle krävas för att lagra objektetiketter och underwebbplatstext.

List-View objektets position

Varje listvyobjekt har en position och storlek som du kan hämta och ange med hjälp av meddelanden. Du kan också avgöra vilket objekt, om det finns något, på en angiven position. Positionen för listvyobjekt anges i visningskoordinater, som är klientkoordinater som förskjuts av rullningspositionen.

Om du vill hämta och ange ett objekts position använder du meddelandena LVM_GETITEMPOSITION och LVM_SETITEMPOSITION. LVM_GETITEMPOSITION fungerar för alla vyer, men LVM_SETITEMPOSITION fungerar bara för ikon- och små ikonvyer.

Du kan avgöra vilket objekt som finns på en viss plats med hjälp av meddelandet LVM_HITTEST.

Om du vill hämta avgränsningsrektangeln för ett listobjekt eller endast för dess ikon eller etikett använder du meddelandet LVM_GETITEMRECT.

Ordna, sortera och hitta objekt

Du kan använda listvisningsmeddelanden för att ordna och sortera objekt och för att hitta objekt baserat på deras attribut eller positioner. Omplacering av objekt så att de justeras till ett rutnät innebär att objektens index inte ändras. Sortering ändrar sekvensen av objekt (och deras motsvarande index) och flyttar dem sedan därefter. Du kan bara ordna objekt i ikon- och små ikonvyer, men du kan sortera objekt i valfri vy. Om du vill hitta objekt skickar du listvisningsmeddelanden som anger en objektplats eller egenskap.

Om du vill ordna objekt använder du meddelandet LVM_ARRANGE. Du kan se till att objekt alltid ordnas genom att ange LVS_AUTOARRANGE fönsterformat.

Om du vill sortera objekt använder du meddelandet LVM_SORTITEMS. När du sorterar med det här meddelandet anger du en programdefinierad återanropsfunktion som listvisningskontrollen anropar för att jämföra den relativa ordningen för två objekt. Kontrollen skickar till jämförelsefunktionen de objektdata som är associerade med vart och ett av de två objekten. Objektdata är det värde som angavs i lParam medlem i objektets LVITEM- struktur när det infogades i listan. Genom att ange korrekt objektdata och tillhandahålla en lämplig jämförelsefunktion kan du sortera objekt efter deras etikett, efter valfritt underelement eller efter någon annan egenskap. Observera att sortera objekt inte ändrar ordningen på motsvarande underobjekt. När objekten sorteras om, förs deras motsvarande underobjekt med dem; det betyder att hela rader hålls ihop. Om du vill ordna kolumnerna separat från varandra, och frikoppla underobjekten från deras objekt, måste du återskapa kolumnerna efter att de har sorterats, med hjälp av LVM_SETITEM.

Du kan se till att en listvykontroll alltid sorteras genom att ange LVS_SORTASCENDING eller LVS_SORTDESCENDING fönsterformat. Kontroller med dessa formatmallar använder etiketttexten för objekten för att sortera dem i stigande eller fallande ordning. Du kan inte ange en jämförelsefunktion när du använder dessa fönsterformat. Om en listvykontroll har någon av dessa stilar, kommer ett LVM_INSERTITEM-meddelande att misslyckas om du försöker infoga ett objekt som har LPSTR_TEXTCALLBACK som pszText-medlem i dess LVITEM--struktur.

Du hittar ett listvyobjekt med specifika egenskaper med hjälp av meddelandet LVM_FINDITEM. Du hittar ett listvyobjekt som är i ett angivet tillstånd och har en angiven relation till ett visst objekt med hjälp av LVM_GETNEXTITEM meddelande. Du kan till exempel hämta nästa markerade objekt till höger om ett angivet objekt.

List-View kolumner

Kolumner styr hur objekt och deras underobjekt visas i rapportvyn. Varje kolumn har en rubrik och en bredd och är associerad med ett specifikt underobjekt; underobjekt noll är objektets ikon och etikett. Attributen för en kolumn definieras av en LVCOLUMN- struktur.

Om du vill lägga till en kolumn i en listvykontroll använder du meddelandet LVM_INSERTCOLUMN. Om du vill ta bort en kolumn använder du meddelandet LVM_DELETECOLUMN.

Not

Borttagning av kolumn noll för en listvykontroll stöds endast i ComCtl32.dll version 6 och senare. Version 5 stöder också borttagning av kolumn noll, men först när du har använt CCM_SETVERSION för att ange versionen till 5 eller senare. Versioner före version 5 stöder inte borttagning av kolumn noll.

 

Du kan hämta och ändra egenskaperna för en befintlig kolumn med hjälp av LVM_GETCOLUMN och LVM_SETCOLUMN meddelanden. Om du vill hämta eller ändra en kolumns bredd använder du meddelandena LVM_GETCOLUMNWIDTH och LVM_SETCOLUMNWIDTH.

Om inte LVS_NOCOLUMNHEADER fönsterformat har angetts visas kolumnrubriker i rapportvyn. Användaren kan klicka på en kolumnrubrik, vilket gör att en LVN_COLUMNCLICK meddelandekod skickas till det överordnade fönstret. Normalt sorterar det överordnade fönstret listvisningskontrollen efter den angivna kolumnen när det här klicket inträffar. Användaren kan också dra kolumnstödlinjerna mellan rubrikerna för att storleksanpassa kolumnerna.

Listvisningskontroller kan visa bilder bredvid kolumnrubriker. För att implementera den här funktionen, ange värdet LVCF_IMAGE och tilldela bildens index till medlemmen iImage i strukturen LVCOLUMN.

Listvisningskontroller kan ange i vilken ordning kolumner ska visas. Om du vill implementera den här funktionen anger du värdet LVCF_ORDER och tilldelar kolumnordningen till iOrder- medlem i LVCOLUMN- struktur. Kolumnordningen är nollbaserad och är i vänster-till-höger-ordning. Noll anger till exempel kolumnen längst till vänster.

List-View rullningsläge

Om inte LVS_NOSCROLL fönsterformat har angetts kan en listvykontroll rullas för att visa fler objekt än vad som får plats i kontrollens klientområde. Du kan hämta en listvykontrolls rullningsposition och relaterad information, rulla en listvykontroll med ett angivet belopp eller rulla en listvykontroll så att ett angivet listobjekt visas.

I ikonvy eller liten ikonvy definieras den aktuella rullningspositionen av visningsursprunget. Ursprung för vyn är de koordinater, i förhållande till det synliga området i listvy-kontrollen, som motsvarar vykoordinaterna (0, 0). För att hämta den aktuella vyns ursprung använder du meddelandet LVM_GETORIGIN. Det här meddelandet ska endast användas i ikonvy eller liten ikonvy; Det returnerar ett fel i list- eller rapportvyn.

I list- eller rapportvyn definieras den aktuella rullningspositionen av översta indexet. Det översta indexet är indexet för det första synliga objektet i listvisningskontrollen. Om du vill hämta det aktuella toppindexet använder du meddelandet LVM_GETTOPINDEX. Det här meddelandet returnerar endast ett giltigt resultat i list- eller rapportvyn. den returnerar noll i ikon eller liten ikonvy.

Du kan använda meddelandet LVM_GETVIEWRECT för att hämta avgränsningsrektangeln för alla objekt i en listvykontroll i förhållande till kontrollens synliga område.

Meddelandet LVM_GETCOUNTPERPAGE returnerar antalet objekt som får plats på en sida i listvisningskontrollen. Det här meddelandet returnerar endast ett giltigt resultat i list- och rapportvyer. i ikon och små ikonvyer returneras det totala antalet objekt.

Om du vill rulla en listvykontroll med en viss mängd använder du meddelandet LVM_SCROLL. Med hjälp av LVM_ENSUREVISIBLE meddelande kan du rulla listvisningskontrollen om det behövs för att säkerställa att ett angivet objekt visas.

List-View Etikettredigering

Med en listvykontroll som har LVS_EDITLABELS fönsterstil kan en användare redigera objektetiketter på plats. Användaren börjar redigera genom att klicka på etiketten för ett objekt som har fokus. Ett program kan också börja redigera automatiskt med hjälp av meddelandet LVM_EDITLABEL. Listvykontrollen meddelar det överordnade fönstret när redigeringen börjar och när den avbryts eller slutförs. När redigeringen är klar ansvarar det överordnade fönstret för att uppdatera objektets etikett, om det är lämpligt.

När etikettredigeringen börjar skapas en redigeringskontroll, placeras och initieras. Innan den visas skickar listvisningskontrollen sitt överordnade fönster en LVN_BEGINLABELEDIT meddelandekod. Om du behöver ändra processen för etikettredigering kan du implementera en hanterare för det här meddelandet.

En användning för en LVN_BEGINLABELEDIT meddelandehanterare är att styra vilka etiketter användaren kan redigera. Om du vill förhindra etikettredigering returnerar du ett värde som inte är noll. Om du vill anpassa etikettredigeringen måste meddelandehanteraren hämta ett handtag till redigeringskontrollen genom att skicka ett LVM_GETEDITCONTROL meddelande till listvisningskontrollen. När du har det handtaget, kan du anpassa redigeringskontrollen genom att skicka vanliga EM_XXX-meddelanden. Om du till exempel vill begränsa mängden text som en användare kan ange skickar du redigeringskontrollen ett EM_LIMITTEXT meddelande. Du kan ändra redigeringskontrollens standardtext med SetWindowText. Du kan till och med underklassera redigeringskontrollen för att fånga upp och ta bort ogiltiga tecken.

När etikettredigering avbryts eller slutförs skickar en list-view kontroll sitt överordnade fönster en LVN_ENDLABELEDIT meddelandekod. Parametern lParam är adressen till en NMLVDISPINFO- struktur. Det objektet medlem i den här strukturen är en LVITEM- struktur vars iItem medlem identifierar objektet. Om redigeringen avbryts är pszText- medlem i LVITEM- struktur NULL-; annars är pszText adressen till den redigerade texten. Det överordnade fönstret ansvarar för att uppdatera objektets etikett om den vill behålla den nya etiketten.

List-View färger

Ett program kan hämta och ange tre färger för en listvykontroll.

Färg Meddelanden som används för att hämta och ange färger
Textfärg LVM_GETTEXTCOLOR, LVM_SETTEXTCOLOR
Bakgrundsfärg för text LVM_GETTEXTBKCOLOR, LVM_SETTEXTBKCOLOR
Bakgrundsfärg för fönster LVM_GETBKCOLOR, LVM_SETBKCOLOR

 

Om du vill anpassa utseendet på en listvykontroll avsevärt använder du NM_CUSTOMDRAW (listvy) eller använder visuella format (se Visuella format och Aktivera visuella format).

Ordna listobjekt efter grupp

Med grupperingsfunktionerna i listvisningskontrollen kan du visuellt gruppera logiskt relaterade uppsättningar med objekt. Grupper kan skapas baserat på objektegenskaper, attribut eller andra egenskaper. Dessa grupper avgränsas vanligtvis på skärmen med en vågrät rubrik som innehåller namnet på gruppen. Följande skärmbild visar grupperade objekt.

skärmdump av en listvisningskontroll, med hundar i en grupp och katter i en annan grupp

Du använder LVGROUP- struktur för att lagra information om en grupp, till exempel sidhuvud och sidfotstext, gruppens aktuella tillstånd och så vidare. Grupperings-API:et innehåller meddelanden som gör att du kan hantera grupper och gruppelement genom att lägga till objekt i grupper, lägga till grupper i vyer, sortera gruppobjekt och fråga grupper om objektstorlek och annan information. Du kan till exempel ange och hämta visningsparametrar för varje grupp med hjälp av makrona ListView_SetGroupMetrics och ListView_GetGroupMetrics.

Gruppering är tillgängligt i alla vyer utom i listvyn. Den är inte tillgänglig för kontroller som har LVS_OWNERDATA formatmall.

Mer information finns i Using List-View Controls.

Insättningsmarkeringar

Insättningsmarkeringar visar användare var dragna objekt ska placeras. Insättningsmarkeringar visas för närvarande när användaren drar ett objekt till menyn Starta eller snabbstartsfältet. Insättningsmarkeringen fungerar också för listor som är inställda på autoarrange. När en användare drar ett objekt till en punkt mellan två andra objekt visar insättningsmarkeringen objektets förväntade nya plats. Följande skärmbild visar ett insättningsmärke.

skärmbild som visar en insättningsmarkering när du drar en fil mellan två andra i en listvy-kontroll

API-elementen för infogningsmarkering möjliggör placering av insättningsmarkeringar genom att tillhandahålla meddelanden och flaggor som utför träffidentifiering, som anger platsen och utseendet på insättningsmarkeringen efter objekt och den frågan för information om insättningsmärkets aktuella storlek och utseende.

Se även