本文介绍如何在视觉编辑服务器应用程序中实现就地框架窗口(如果不使用应用程序向导创建服务器应用程序)。 按照本文中所述的过程,可以从应用程序向导生成的应用程序或 Visual C++ 提供的示例使用现有的就地框架窗口类。
声明就地框架窗口类
从
COleIPFrameWnd
中派生就地框架窗口类。在类头文件中使用DECLARE_DYNCREATE宏。
在类实现(.cpp)文件中使用IMPLEMENT_DYNCREATE宏。 这样,此类的对象就可以由框架创建。
在框架窗口类中声明成员
COleResizeBar
。 如果要在服务器应用程序中支持就地调整大小,则需要这样做。声明消息
OnCreate
处理程序(使用类向导),并调用Create
COleResizeBar
成员(如果已定义该处理程序)。如果有工具栏,请在框架窗口类中声明成员
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文件中包含此就地框架窗口类的头文件。
在
InitInstance
应用程序类中,调用SetServerInfo
文档模板对象的函数以指定要用于打开和就地编辑的资源和就地框架窗口。
语句中的 if
一系列函数调用从服务器提供的资源创建工具栏。 此时,工具栏是容器窗口层次结构的一部分。 由于此工具栏派生自 CToolBar
,因此它将将其消息传递给其所有者(容器应用程序的框架窗口),除非更改所有者。 这就是为什么调用 SetOwner
是必要的。 此调用将更改将命令发送到服务器的就地框架窗口的窗口,从而导致消息传递到服务器。 这样,服务器就可以对它提供的工具栏上的作做出反应。
工具栏位图的 ID 应与服务器应用程序中定义的其他就地资源相同。 有关详细信息 ,请参阅菜单和资源:服务器添加 。
有关详细信息,请参阅类库参考中的 COleIPFrameWnd、COleResizeBar 和 CDocTemplate::SetServerInfo。