서버: 내부 프레임 창 구현
이 문서에서는 서버 애플리케이션을 만들 때 애플리케이션 마법사를 사용하지 않는 경우, 시각적인 편집 서버 애플리케이션에서 내부 프레임 창을 구현하기 위해 수행해야 하는 작업에 대해 설명합니다. 이 문서에 설명된 절차를 따르는 대신 애플리케이션 마법사에서 생성된 애플리케이션 또는 Visual C++와 함께 제공되는 샘플에서 기존 현재 위치 프레임 창 클래스를 사용할 수 있습니다.
내부 frame-window 클래스를 선언하려면
COleIPFrameWnd
에서 내부 frame-window 클래스를 파생합니다.클래스 헤더 파일에서 DECLARE_DYNCREATE 매크로를 사용합니다.
클래스 구현(.cpp) 파일에서 IMPLEMENT_DYNCREATE 매크로를 사용합니다. 이렇게 하면 프레임워크가 이 클래스의 개체를 만들 수 있습니다.
frame-window 클래스에서
COleResizeBar
멤버를 선언합니다. 이 멤버는 서버 애플리케이션의 내부 크기 조정을 지원하려는 경우에 필요합니다.클래스 마법사를
OnCreate
사용하여 메시지 처리기를 선언하고, 정의한 경우 멤버를 호출Create
합니다COleResizeBar
.도구 모음이 있으면 frame-window 클래스에서
CToolBar
멤버를 선언합니다.서버가 내부에서 활성 상태일 때 도구 모음을 만들도록
OnCreateControlBars
멤버 함수를 재정의합니다. 예시: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; }
5단계의 코드 설명을 참조하십시오.
기본 .cpp 파일에서 이 내부 frame-window 클래스에 대한 헤더 파일을 포함합니다.
애플리케이션 클래스에 대한
InitInstance
에서 문서 템플릿 개체의SetServerInfo
함수를 호출하여 열기 및 내부 편집에 사용할 리소스 및 내부 프레임 창을 지정합니다.
문의 일련의 함수 호출 if
은 서버가 제공한 리소스에서 도구 모음을 만듭니다. 이 지점에서 도구 모음은 컨테이너의 창 계층의 일부입니다. 도구 모음이 CToolBar
에서 파생되기 때문에 소유자를 변경하지 않는 한, 해당 메시지를 소유자 즉, 컨테이너 애플리케이션의 프레임 창으로 전달합니다. SetOwner
호출이 필요한 이유는 바로 이 때문입니다. 이 호출은 명령이 서버의 내부 프레임 창에 전달되는 창을 변경해서 메시지가 서버에 전달되도록 합니다. 그러면 서버가 제공된 도구 모음에서 작업에 반응할 수 있습니다.
도구 모음 비트맵 ID는 서버 애플리케이션에 정의된 다른 내부 리소스와 동일해야 합니다. 자세한 내용은 메뉴 및 리소스: 서버 추가를 참조하세요.
자세한 내용은 클래스 라이브러리 참조에서 COleIPFrameWnd, COleResizeBar 및 CDocTemplate::SetServerInfo를 참조하세요.