Udostępnij przez


Serwery: implementowanie okien ramowych In-Place

W tym artykule wyjaśniono, co należy zrobić w celu zaimplementowania okien ramowych w aplikacji serwera do edycji wizualizacji, jeśli nie używasz kreatora aplikacji do tworzenia aplikacji serwera. Zamiast wykonywać procedurę opisaną w tym artykule, możesz użyć istniejącej wbudowanej klasy okna ramowego z aplikacji stworzonej za pomocą kreatora lub przykładu dostarczonego z programem Visual C++.

Aby zadeklarować klasę okien ramowych w miejscu

  1. Utwórz klasę okna w miejscu pochodną od COleIPFrameWnd.

    • Użyj makra DECLARE_DYNCREATE w pliku nagłówka klasy.

    • Użyj makra IMPLEMENT_DYNCREATE w implementacji klasy (w pliku .cpp). Dzięki temu obiekty tej klasy mogą być tworzone przez platformę.

  2. Zadeklaruj element członkowski COleResizeBar w klasie okna ramowego. Jest to konieczne, jeśli chcesz obsługiwać bezpośrednią zmianę rozmiaru w aplikacjach serwerowych.

    Zadeklaruj procedurę obsługi komunikatów OnCreate (korzystając z Kreatora klas), a następnie wywołaj Create dla swojego członka COleResizeBar, jeśli został on zdefiniowany.

  3. Jeśli masz pasek narzędzi, zadeklaruj członek CToolBar w klasie okna ramki.

    Zastąpi OnCreateControlBars funkcję składową, aby utworzyć pasek narzędzi, gdy serwer jest aktywny. Przykład:

    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;
    }
    

    Zapoznaj się z omówieniem tego kodu, wykonując krok 5.

  4. Dołącz plik nagłówkowy dla tej klasy okna ramowego w głównym pliku .cpp.

  5. W InitInstance klasie aplikacji wywołaj funkcję SetServerInfo obiektu szablonu dokumentu, aby określić zasoby i okno ramki do edycji w oknie oraz edycji w miejscu.

Seria wywołań funkcji w if instrukcji tworzy pasek narzędzi na podstawie udostępnionych zasobów serwera. Na tym etapie pasek narzędzi jest częścią hierarchii okien kontenera. Ponieważ ten pasek narzędzi jest oparty na CToolBar, przekaże swoje komunikaty do właściciela, czyli ramowego okna aplikacji kontenera, chyba że zmienisz właściciela. Dlatego wezwanie do SetOwner jest konieczne. To wywołanie zmienia okno docelowe, do którego są wysyłane polecenia, na ramę okna serwera, co powoduje przekazanie komunikatów do serwera. Dzięki temu serwer może reagować na operacje na wyświetlonym pasku narzędzi.

ID mapy bitowej paska narzędzi powinien być taki sam jak inne zasoby, zdefiniowane w aplikacji serwera. Aby uzyskać szczegółowe informacje , zobacz Menu i zasoby: Dodatki serwera .

Aby uzyskać więcej informacji, zobacz COleIPFrameWnd, COleResizeBar i CDocTemplate::SetServerInfo w dokumentacji biblioteki klas.

Zobacz także

Serwerów
Serwery: implementowanie serwera
Serwery: implementowanie dokumentów serwera
Serwery: elementy serwera