VIEWEX 示例:演示多个视图、滚动视图和拆分窗口
更新:2007 年 11 月
VIEWEX 示例阐释以下内容。
静态拆分窗口,其中窗格的顺序和数目永不更改,而且窗格通常属于不同的视图类。
窗体视图 (CFormView),它与同一文档的其他视图保持同步。
对话框数据交换 (DDX),尤其是单选按钮组按钮数据。
VIEWEX 中的文档很简单。它的数据包括字符串及其颜色。
安全说明: |
---|
提供该示例代码是为了阐释一个概念,并不代表着最安全的编码实践,因此不应在应用程序或网站中使用该示例代码。对于超出本示例代码的预期用途以外的使用所造成的偶然或继发性损失,Microsoft 不承担任何责任。 |
获取示例和安装示例的说明:
在 Visual Studio 的“帮助”菜单上,单击“示例”。
有关更多信息,请参见定位示例文件。
示例的最新版本和完整列表可以从 Visual Studio 2008 Samples page(Visual Studio 2008 示例页面)联机获取。
还可以在计算机的硬盘上查找示例。默认情况下,示例和自述文件将复制到 \Program Files\Visual Studio 9.0\Samples\ 下的文件夹中。对于 Visual Studio 速成版,所有示例都位于联机位置。
生成并运行示例
生成并运行 VIEWEX 示例
打开解决方案 viewex.sln。
在“生成”菜单中单击“生成”。
在“调试”菜单中,单击“开始执行(不调试)”。
第一次运行 VIEWEX 时,它显示一个 New 对话框,在其中选择要阐释的文档窗口类型:
Simple Text 使用当前的颜色在窗口的中央显示字符串。
Input Form View 提供一个窗体(一个 CFormView),在其中可更改编辑控件中的字符串,并通过从单选按钮组中选择来更改颜色。
SplitterFrame 显示在拆分窗口的两个并排窗格中,具有“Simple Text”和“Input Form”。在“Input Form”中更改字符串(逐字符)或颜色时,“Simple Text”视图会自动反映该更改。
Three-waySplitterFrame 在一个拆分窗口窗格中显示“Input Form”视图。另一个窗格由一个拆分栏分为两个子窗格:上面的子窗格显示“Simple Text”视图;下面的子窗格显示“Color”视图。“Color”视图只是完全用当前颜色绘制自身。
通过使用输入窗体中的编辑控件并单击“Edit”菜单上的“Change Data”可更改字符串。
还可同时查看多个文档。但为了简单起见,无法保存或重新打开文档,也无法在多个上述窗口中查看同一个文档。
静态拆分窗口
在 VIEWEX 中,MDI 子窗口通过重写 OnCreateClient 在其工作区内创建一个 1 x 2 的拆分窗口。在三重拆分的情况下,VIEWEX 在 1 x 2 拆分窗口的右窗格内嵌入另一个 2 x 1 的拆分窗口。
VIEWEX 调用 CSplitterWnd::CreateStatic 而不是 CSplitterWnd::Create 来创建静态拆分窗口而不是动态拆分窗口。VIEWEX 拆分窗口的每个窗格都有一个不同的视图类。VIEWEX 调用 CSplitterWnd::CreateView 为每个窗格指定 CView 派生类。对于第一个窗格,VIEWEX 使用文档模板对象中的视图类细节,此细节被传递到 CCreateContext 的 m_pNewViewClass 成员中的 OnCreateClient。对于其他窗格,VIEWEX 指定视图的 RUNTIME_CLASS。
窗体视图
CInputView 阐释如何将窗体视图与其他视图同步,这样当用户在其中一个字段中输入数据时,更改会立即反映在其他视图中。为此,CInputView 将它的所有控件的 ON_EN_CHANGE 和 ON_BN_CLICKED 映射到中央 OnDataChange 消息处理程序。OnDataChange 调用 CView::UpdateData 以将数据从屏幕传输到 CInputView 的成员变量,然后调用文档的 UpdateAllViews 以将更改通知其他视图。
对话框数据交换 (DDX)
VIEWEX 的 CInputView 阐释单选按钮组按钮数据的对话框数据交换 (DDX)。在 Iputvw.h 中,注意只有单选按钮组中的第一个按钮映射到 CInputView::DoDataExchange 中的成员变量 m_iColor。m_iColor 是一个从零开始的序号值 (int),表示选中了哪个单选按钮。
关键字
此示例说明以下关键字:
CDC::FillRect;CDialog::DoModal;CDocument::OnNewDocument;CDocument::UpdateAllViews;CFrameWnd::LoadFrame;CFrameWnd::OnCreateClient;CFrameWnd::SetActiveView;CObject::Serialize;CRect::Height;CRect::Width;CSplitterWnd::CreateStatic;CSplitterWnd::CreateView;CSplitterWnd::GetPane;CSplitterWnd::IdFromRowCol;CString::GetLength;CView::GetDocument;CView::OnActivateView;CView::OnDraw;CView::OnUpdate;CWinApp::AddDocTemplate;CWinApp::InitInstance;CWinApp::OnFileNew;CWnd::DoDataExchange;CWnd::GetClientRect;CWnd::OnMouseActivate;CWnd::ShowWindow;CWnd::UpdateData;CWnd::UpdateWindow;RGB;SetBkMode;SetTextAlign;SetTextColor;TextOut;max
说明: |
---|
某些示例(如此示例)尚未经过修改以反映 Visual C++ 向导、库和编译器中所做的更改,但仍演示了如何完成所需的任务。 |