Dela via


Flera dokumenttyper, vyer och ramfönster

Standardrelationen mellan ett dokument, dess vy och dess ramfönster beskrivs i Skapa dokument/visa. Många program stöder en enda dokumenttyp (men möjligen flera öppna dokument av den typen) med en enda vy i dokumentet och endast ett ramfönster per dokument. Men vissa program kan behöva ändra en eller flera av dessa standardvärden.

Vad vill du veta mer om?

Flera dokumenttyper

MFC-programguiden skapar en enda dokumentklass åt dig. I vissa fall kan du dock behöva ha stöd för mer än en dokumenttyp. Ditt program kan till exempel behöva kalkylblads- och diagramdokument. Varje dokumenttyp representeras av sin egen dokumentklass och förmodligen av sin egen vyklass också. När användaren väljer kommandot Arkiv nytt visar ramverket en dialogruta som visar de dokumenttyper som stöds. Sedan skapas ett dokument av den typ som användaren väljer. Varje dokumenttyp hanteras av ett eget dokumentmallsobjekt.

Information om hur du skapar extra dokumentklasser finns i Lägga till en klass. Välj CDocument som klasstyp som ska härledas från och ange den begärda dokumentinformationen. Implementera sedan den nya klassens data.

Om du vill informera ramverket om din extra dokumentklass måste du lägga till ett andra anrop till AddDocTemplate i åsidosättningen av InitInstance i din programklass. Mer information finns i Dokumentmallar.

Flera vyer

Många dokument kräver bara en enda vy, men det är möjligt att stödja mer än en vy av ett enda dokument. För att hjälpa dig att implementera flera vyer behåller ett dokumentobjekt en lista över sina vyer, tillhandahåller medlemsfunktioner för att lägga till och ta bort vyer och tillhandahåller medlemsfunktionen UpdateAllViews för att låta flera vyer veta när dokumentets data har ändrats.

MFC stöder tre vanliga användargränssnitt som kräver flera vyer i samma dokument. Dessa modeller är:

  • Visa objekt i samma klass, var och en i ett separat MDI-dokumentramfönster.

    Du kanske vill ha stöd för att skapa ett andra bildrutefönster i ett dokument. Användaren kan välja kommandot Nytt fönster för att öppna en andra bildruta med en vy över samma dokument och sedan använda de två ramarna för att visa olika delar av dokumentet samtidigt. Ramverket stöder kommandot Nytt fönster på menyn Fönster för MDI-program genom att duplicera det första ramfönstret och vyn som är kopplad till dokumentet.

  • Visa objekt i samma klass i samma dokumentramfönster.

    Delningsfönster delar upp visningsutrymmet för ett enskilt dokumentfönster i flera separata vyer av dokumentet. Ramverket skapar flera vyobjekt från samma vyklass. Mer information finns i Dela upp Windows.

  • Visa objekt i olika klasser i ett enda ramfönster.

    I den här modellen, en variant av delningsfönstret, delar flera vyer ett enda ramfönster. Vyerna skapas från olika klasser, där varje vy ger ett annat sätt att visa samma dokument. En vy kan till exempel visa ett ordbearbetningsdokument i normalt läge medan den andra vyn visar det i dispositionsläge. Med en delningskontroll kan användaren justera vyernas relativa storlekar.

Följande bild, uppdelad i delar a, b och c, visar de tre användargränssnittsmodellerna i den ordning som visas ovan.

Diagram som visar tre användargränssnitt för flera vyer.
Multiple-View användargränssnitt

Ramverket tillhandahåller dessa modeller genom att implementera kommandot Nytt fönster och genom att tillhandahålla klassen CSplitterWnd, enligt beskrivningen i Splitter Windows. Du kan implementera andra modeller med dessa som utgångspunkt. Exempelprogram som illustrerar olika konfigurationer av vyer, ramfönster och delare finns i MFC-exempel.

Mer information om UpdateAllViewsfinns i CView-klassen i MFC-referensen och Scribble-exemplet.

Windows med flera ramar

Du kan använda kommandot Nytt fönster på menyn Fönster för MDI-program för att skapa ett andra ramfönster i samma dokument. Mer information finns i den första modellen i bilden Multiple-View användargränssnitt.

Dela fönster

I ett delningsfönster är eller kan fönstret delas upp i två eller flera rullningsbara rutor. En delningskontroll (eller "delningsruta") i fönsterramen bredvid rullningslisterna gör att användaren kan justera de relativa storlekarna för fönstren. Varje fönster är en vy i samma dokument. I "dynamiska" delare är vyerna av samma klass, som visas i del b av bilden Multiple-View användargränssnitt. I "statiska" delare kan vyerna vara av olika klasser. Splitterfönster av båda typerna stöds av klassen CSplitterWnd.

Dynamiska delningsfönster, med vyer av samma klass, gör det möjligt för användaren att dela upp ett fönster i flera fönster efter be vilja och bläddra sedan i olika fönster för att se olika delar av dokumentet. Användaren kan också ta bort fönstret för att ta bort de ytterligare vyerna. Splitterfönstren som lagts till i klotterexemplet är ett exempel. I det avsnittet beskrivs tekniken för att skapa dynamiska splitterfönster. Ett dynamiskt delningsfönster visas i del b av bilden Multiple-View användargränssnitt.

Statiska delningsfönster, med vyer av olika klasser, börjar med fönstret uppdelat i flera fönster, var och en med ett annat syfte. I Visual C++-bitmappsredigeraren visar bildfönstret till exempel två fönster sida vid sida. I det vänstra fönstret visas en bild i naturlig storlek av bitmappen. I det högra fönstret visas en zoomad eller förstorad bild av samma bitmapp. Fönstren avgränsas med ett "delningsfält" som användaren kan dra för att ändra de relativa storlekarna för fönstren. Ett statiskt splitterfönster visas i del c av bilden Multiple-View användargränssnitt.

För mer information, se klassen CSplitterWnd i MFC-referensen och exempel i MFC.

Se även

Arkitektur för dokument/vy