使用 eVC++ 3.0 创建 MDI 程序
一篇文章,说明如何在 WinCE 中使用 eVC++ 3.0 编译器为 PocketPC 2002 创建多个视图。
引言
WinCE for PocketPC 2002 通常仅支持 SDI MFC 应用程序。通过一些技巧,您可以将其转换为 MDI 应用程序,方法是在必要时切换视图。由于屏幕空间有限,您仍然无法同时看到多个视图。您可以选择隐藏当前视图、销毁当前视图,或者隐藏一些并销毁另一些。视图是动态创建的,内存中视图的数量没有限制——当然,限制将是硬件中的内存量。这些视图可以是 eVC++ 3.0 编译器支持的任何类型。
可以有任意数量的不同视图类,但任何给定视图只有一个实例。因此,您可以拥有以下视图的每个实例:CMyFirstView
、CMySecondView
和 CMyThirdView
,但您不能拥有 CMyFirstView
的两个实例。原因是 OnSelectNextView()
会搜索其当前视图列表,以查看是否已存在所需类别的视图。如果存在,则将其激活。否则,如果不存在,则创建所需类类型的新实例并将其添加到列表中。
使用代码
以下是在您的项目中实现该类的步骤。
- 创建一个新的 MFC 文档/视图项目,或使用现有项目。
- 将两个文件 SVMainFrame.cpp 和 SVMainFrame.h 复制到项目目录中,并将它们添加到项目中。
- 打开 CMainFrm.h 并将
CFrameWnd
替换为CSFMainFrame
。
class CMainFrame : public CSVMainFrame { // class definition here. {
- 在 CMainFrm.h 中删除
CCeCommandBar m_wndCommandBar
对象,因为它是在 CSVMainFrame.h 中声明的。 - 在 CMainFrm.cpp 中,将文件中所有出现的
CMainWnd
替换为CSVMainFrame
。该类在文件中出现两次。 - 根据需要创建尽可能多的视图,添加导航按钮或菜单项,以允许用户在视图列表中向前或向后移动。如果您创建
CFormView
类,请确保将样式设置为Child
并将边框设置为 None。 - 要在一个视图链中前进,请调用
OnSelectNextView()
方法,如下所示。在此示例中,m_selection
是一个单选按钮,其中 0 表示隐藏窗口,非 0 表示销毁当前窗口
void CSelViewDemoView::OnNextViewButton() { UpdateData(); CMainFrame* pMFrame = (CMainFrame*)GetParentFrame(); pMFrame->OnSelectNextView(RUNTIME_CLASS(CMySecondView), m_selection == 0 ? AIT_HIDE_WINDOW : AIT_DESTROY_WINDOW); }
- 要向后导航到视图链中,请调用
OnSelectPrevView()
。在此示例中,m_selection
的含义与前面的示例相同。如果没有先前的视图,则当前视图不会更改。
void CMySecondView::OnPreviousView() { UpdateData(); CMainFrame* pMFrame = (CMainFrame*)GetParentFrame(); pMFrame->OnSelectPrevView(m_selection == 0 ? AIT_HIDE_WINDOW : AIT_DESTROY_WINDOW); }