Dela via


Servrar: Implementering av In-Place ramfönster i Windows

Den här artikeln förklarar vad du måste göra för att implementera ramfönster på plats i ditt program för visuell redigeringsserver om du inte använder programguiden för att skapa serverprogrammet. I stället för att följa proceduren som beskrivs i den här artikeln kan du använda en befintlig ramfönsterklass på plats från antingen ett programguidegenererat program eller ett exempel som tillhandahålls med Visual C++.

Deklarera en ramfönsterklass på plats

  1. Härled en ramfönsterklass på stället från COleIPFrameWnd.

    • Använd DECLARE_DYNCREATE makrot i klasshuvudfilen.

    • Använd IMPLEMENT_DYNCREATE makrot i din klassimplementeringsfil (.cpp). På så sätt kan objekt i den här klassen skapas av ramverket.

  2. Deklarera en COleResizeBar medlem i klassen frame-window. Detta behövs om du vill ha stöd för storleksändring på plats i serverprogram.

    Deklarera en OnCreate meddelandehanterare (med hjälp av klassguiden) och anropa Create din COleResizeBar medlem om du har definierat den.

  3. Om du har ett verktygsfält deklarerar du en CToolBar medlem i klassen frame-window.

    Åsidosätt OnCreateControlBars medlemsfunktionen för att skapa ett verktygsfält när servern är aktiv på plats. Till exempel:

    BOOL CInPlaceFrame::OnCreateControlBars(CFrameWnd* pWndFrame, CFrameWnd* pWndDoc)
    {
       UNREFERENCED_PARAMETER(pWndDoc);
    
       // Set owner to this window, so messages are delivered to correct app
       m_wndToolBar.SetOwner(this);
    
       // Create toolbar on client's frame window
       if (!m_wndToolBar.CreateEx(pWndFrame, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
          | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
          !m_wndToolBar.LoadToolBar(IDR_SRVR_INPLACE))
       {
          TRACE0("Failed to create toolbar\n");
          return FALSE;
       }
    
       // TODO: Delete these three lines if you don't want the toolbar to be dockable
       m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
       pWndFrame->EnableDocking(CBRS_ALIGN_ANY);
       pWndFrame->DockControlBar(&m_wndToolBar);
    
       return TRUE;
    }
    

    Se diskussionen om den här koden i steg 5.

  4. Inkludera huvudfilen för denna in-place ramfönsterklass i din .cpp huvudfil.

  5. I InitInstance ska du för programklassen anropa SetServerInfo-funktionen hos dokumentmallsobjektet för att ange resurser och ramfönster som ska användas vid öppen redigering och redigering på plats.

Serien med funktionsanrop i -instruktionen if skapar verktygsfältet från de resurser som servern har angett. Nu är verktygsfältet en del av containerns fönsterhierarki. Eftersom det här verktygsfältet härleds från CToolBarskickar det sina meddelanden till dess ägare, containerprogrammets ramfönster, såvida du inte ändrar ägaren. Det är därför uppmaningen till SetOwner är nödvändig. Det här anropet ändrar fönstret dit kommandon skickas till serverns in-place-ramfönster, vilket gör att meddelandena vidarebefordras till servern. På så sätt kan servern reagera på åtgärder i verktygsfältet som den tillhandahåller.

ID:t för verktygsfältets bitmapp ska vara samma som de andra resurser på plats som definierats i serverprogrammet. Mer information finns i Menyer och resurser: Servertillägg .

Mer information finns i COleIPFrameWnd, COleResizeBar och CDocTemplate::SetServerInfo i klassbiblioteksreferensen.

Se även

Servrar
Servrar: Implementering av en server
Servrar: Implementering av serverdokument
Servrar: Serverobjekt