如何在SDI中创建多框架视图
来源:互联网 发布:淘宝男款白衬衫 编辑:程序博客网 时间:2024/06/10 02:15
作者:陈飞
下载源代码
当某一款待开发的系统由几大功能组成,并且各个模块在处理数据和处理方式上都有很大的区别,往往要考虑多框架的方案。即在一个程序中同事创建多个文档/视图框架,使每个框架有其自己的菜单、工具栏、文档和视图。这样一方面封装了各个模块的处理过程和处理数据,另一方面也可以使程序结构清晰,开发和维护都简单化。
工程实现
(1)建立工程项目
利用Visual C++6.0向导新建一个名为TestMultiFrame的MFC SDI(单文档)应用程序。
(2)增加资源和相应的命令
1、双击Menu项的IDR_MAINFRAME选项,添加“窗口”菜单项,在弹出菜单中添加“创建新框架窗口”、“显示新框架窗口”、“显示新窗口”三个子菜单项,分别定义菜单项的ID,并为三个菜单项添加基于TestMultiFrameApp的菜单事件函数OnCreatenewframewnd()、OnShownewframewnd()、OnShownewwnd()。
2、右击Menu项,选择Insert Menu,添加新的菜单资源,并修改菜单的ID,添加“窗口”菜单项,在弹出菜单中添加“显示原框架窗口”和“显示新的窗口”两个子项,添加菜单项的事件函数OnShowoldframewnd()、OnShownewwnd()。
(3)添加新的框架、视图和文档
利用Ctrl加W组合键,调出ClassWizard对话框,单击AddClass按钮,选择New项,弹出增加类的对话框,输入类名和基类信息:
CTestFrame 基类: CFrameWnd
CTestFrameDoc 基类: CDocument
CTestFrameView 基类:CView
(4)动态创建框架窗口
1、在TestMultiFrameApp类中加入成员变量:
private: CSingleDocTemplate* m_pTestDocTemp; CTestFrame* m_pTestFrame; CmainFrame* m_pMainFrame;
2、在其构造函数中将各指针初始化。
3、增加文档模板。
在CTestMulFrameApp中的InitInstance函数,在AddDocTemplate后面加上m_pTestDocTemplate的创建代码。
(5)、创建并切换到新的框架
定位到CTestMulFrameApp中的OnCreatenewframewnd()函数添加如下代码:
if(m_pTestFrame == NULL){ m_pMainFrame = static_cast(m_pMainWnd); m_pMainWnd = NULL;if(m_pTestDocTemplate->OpenDocumentFile(NULL) == NULL) { m_pMainWnd = static_cast(m_pMainFrame); return; } ASSERT(m_pMainWnd != NULL); m_pTestFrame = static_cast(m_pMainWnd);}else{ if(m_pMainWnd != m_pMainFrame) { m_pMainFrame = static_cast(m_pMainWnd); m_pMainWnd = static_cast(m_pTestFrame); } M_pTestFrame->ShowWindow(SW_SHOW); m_pTestFrame->GetActiveView()->OnInitialUpdate(); m_pTestFrame->UpdateWindow();}
(6)、显示原框架窗口
定位到CTestMulFrameApp中的OnShowoldframewnd函数,添加如下代码:
m_pmainFrame->ShowWindow(SW_SHOW);m_pTestFrame->ShowWindow(SW_SHOW);PostThreadMessage(WM_OLDFRAME_FOCUS, 0, (long)m_pMainFrame);
PostThreadMessage函数是用来取得窗口控制权,并将其设定为活动状态。
然后在TestMulFrameApp中的OnOldFrameFocus消息函数中添加:
m_pMainWnd= (CMainFrame*)lParam;
(7)、显示新窗口
根据当前活动窗口所对应的文档对象建立新的视图对象,代码如下:
CMainFrame* pActiveFrame = static_cast(m_pMainWnd);CDocument* pDocument;if(pActiveFrame == NULL || (pDocument = pActiveFrame->GetActiveDocument()) == NULL){ TRACE0(“Warning:No active document for Window New command.\n”); AfxMessageBox(AFX_IDP_COMMAND_FAILUER); Return;}CDocTemplate* pTemplate = pDocment->GetDocTemplate();ASSERT_VALID(pTemplate);CFrameWnd* pFrame = pTemplate->CreateTestFrame(pDocument, pActiveFrame);pTemplate->InitialUpdateFrame(pFrame, pDocument);
本程序是基于单文档的应用程序,通过动态创建框架窗口实现多框架显示,同时,为了满足某种实际需求,程序中还实现了根据当前的活动文档对象建立新的视图对象,以进行多视图显示。具体创建方式请参考附件工程。
- 如何在SDI中创建多框架视图
- 如何在MFC的SDI程序中实现多视图
- 如何在MFC的SDI程序中实现多视图
- 如何在MFC的SDI程序中实现多视图
- 如何SDI中进行多视图切换
- SDI程序中,如何在主框架上切换不同的视图
- 请问如何在扩展 DLL 中创建应用程序框架?如何在DLL中创建窗体(SDI/MDI)?非常急!!!!!!!
- VC如何SDI中进行多视图切换(销毁原视图)
- C++--如何实现SDI程序使用CSplitterWnd创建的多个视图的动态地显示和关闭视图
- C++--如何实现SDI程序使用CSplitterWnd创建的多个视图的动态地显示和关闭视图
- 如何在MFC单文档中创建多视图
- 如何在MFC单文档中创建多视图
- 如何在MFC单文档中创建多视图
- 如何在MFC单文档中创建多视图
- 如何在MySQL中创建视图?
- 【引用】如何在MySQL中创建视图?
- 如何在MySql中创建视图?
- SDI多视图结构中视图间获取指针
- 自己都能感觉到自己的心眼很小
- 源程序到最终可执行文件过程分析
- 控制UIScrollView中在首页不能手指向右滚动
- SSAS_定义和部署多维数据集
- TreeView默认展开所有节点
- 如何在SDI中创建多框架视图
- 详解MYSQL数据库密码的加密方式及破解方法(4)
- shell 参数
- partition by的用法
- Ext4 重写年月控件(解决31号选择其它月份会跳月的问题)
- liferay瘦身(4)--代码删除
- 深入研究析构函数
- 内联函数
- Eclipse 中文插件的安装