Dela via


Containers: Avancerade funktioner

Den här artikeln beskriver de steg som krävs för att införliva valfria avancerade funktioner i befintliga containerprogram. Dessa funktioner är:

Skapa ett container-/serverprogram

Ett container-/serverprogram är ett program som fungerar som både en container och en server. Microsoft Word för Windows är ett exempel på detta. Du kan bädda in Word för Windows-dokument i andra program och du kan även bädda in objekt i Word för Windows-dokument. Processen för att ändra containerprogrammet till både en container och en fullständig server (du kan inte skapa en kombinationscontainer/miniserverapp) liknar processen för att skapa en fullständig server.

Artikeln Servrar: Om du implementerar en server visas ett antal uppgifter som krävs för att implementera ett serverprogram. Om du konverterar ett containerprogram till ett container-/serverprogram måste du utföra några av dessa uppgifter och lägga till kod i containern. Följande visar viktiga saker att tänka på:

  • Containerkoden som skapas av programguiden initierar redan OLE-undersystemet. Du behöver inte ändra eller lägga till något för det stödet.

  • Oavsett var basklassen för en dokumentklass är COleDocumentändrar du basklassen till COleServerDoc.

  • Åsidosätt COleClientItem::CanActivate för att undvika att redigera objekt direkt när servern används för direktredigering.

    Till exempel har MFC OLE-exempel-OCLIENT inbäddat ett objekt som skapats av containern/serverprogrammet. Du öppnar OCLIENT-programmet och redigerar objektet som skapats av containern/serverprogrammet på plats. När du redigerar programmets objekt bestämmer du dig för att bädda in ett objekt som skapats av MFC OLE-exempel-HIERSVR. För att göra detta kan du inte använda aktivering på plats. Du måste öppna HIERSVR helt för att aktivera det här objektet. Eftersom Microsoft Foundation-klassbiblioteket inte stöder den här OLE-funktionen kan du genom att åsidosätta COleClientItem::CanActivate söka efter och förhindra ett eventuellt körtidsfel i programmet.

Om du skapar ett nytt program och vill att det ska fungera som ett container-/serverprogram väljer du det alternativet i dialogrutan OLE-alternativ i programguiden och det här stödet skapas automatiskt. Mer information finns i artikeln Översikt: Skapa en ActiveX-kontrollcontainer. Information om MFC-exempel finns i MFC-exempel.

Observera att du inte kan infoga ett MDI-program i sig självt. Ett program som är en container/server kan inte infogas i sig själv om det inte är ett SDI-program.

Med funktionen Länkar till inbäddade objekt kan en användare skapa ett dokument med en OLE-länk till ett inbäddat objekt i containerprogrammet. Skapa till exempel ett dokument i en ordbehandlare som innehåller ett inbäddat kalkylblad. Om programmet stöder länkar till inbäddade objekt kan det klistra in en länk till kalkylbladet som finns i ordbehandlarens dokument. Med den här funktionen kan din applikation använda informationen i kalkylbladet utan att veta var ordbehandlaren ursprungligen fick den ifrån.

  1. Härled dokumentklassen från COleLinkingDoc i stället för COleDocument.

  2. Skapa ett OLE-klass-ID (CLSID) för ditt program med hjälp av klass-ID-generatorn som ingår i OLE Development Tools.

  3. Registrera programmet med OLE.

  4. Skapa ett COleTemplateServer objekt som medlem i din programklass.

  5. Gör följande i programklassens InitInstance medlemsfunktion:

    • Anslut objektet COleTemplateServer till dokumentmallarna genom att anropa objektets ConnectTemplate medlemsfunktion.

    • COleTemplateServer::RegisterAll Anropa medlemsfunktionen för att registrera alla klassobjekt med OLE-systemet.

    • Ringa COleTemplateServer::UpdateRegistry. Den enda parametern för UpdateRegistry ska vara OAT_CONTAINER om programmet inte startas med "/Embedded"-växeln. Detta registrerar programmet som en container som kan stödja länkar till inbäddade objekt.

      Om programmet startas med växeln "/Embedded" bör det inte visa huvudfönstret, liknande ett serverprogram.

MFC OLE-exempel-OCLIENT implementerar den här funktionen. Ett exempel på hur detta görs InitInstance finns i funktionen i OCLIENT. CPP-fil för det här exempelprogrammet.

Se även

Behållare
Servrar