服务器:实现就地框架窗口
本文介绍如果您不使用应用程序向导创建服务器应用程序,则在可视编辑服务器应用程序中实现就地框架窗口时必须执行的操作。 可使用应用程序向导生成的应用程序或 Visual C++ 提供的示例中的现有就地框架窗口类,来代替本文中概述的下列过程。
声明就地框架窗口类
从
COleIPFrameWnd
派生就地框架窗口类。在类头文件中使用 DECLARE_DYNCREATE 宏。
在类实现 (.cpp) 文件中添加 IMPLEMENT_DYNCREATE 宏。 这使得此类的对象由框架创建。
在框架窗口类中声明
COleResizeBar
成员。 这在您需要在服务器应用程序中支持就地重设大小时是必需的。使用类向导声明
OnCreate
消息处理程序,并为COleResizeBar
成员(如果已定义)调用Create
。如果您有一个工具栏,请在框架窗口类中声明
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。