MFC 多文档程序心得

主要的经典程序可以在MSDN里面输入:MFC 示例 

会有很多好用的例子

多文档多视图 MSDN给出的例子有两种一种是通过MFC向导生成,一种是不用视图/文档模式 其显示直接为CMDIChildWndEx子类,直接处理数据显示,原因很简单——窗口对象的子窗口显示

本质上视图毕竟是个窗口,所以自己绘制,自己处理完全没有问题,而且派生类一样有标题栏,和向导程序异曲同工

添加多个多文档模板类时运行程序需要选择新建哪个模版,网上给出的方案比较多,我也给出一种

方案:在APP类中添加ID_FILE_NEW事件,因为每次新建必然出发此处,而APP类最先收到及时处理,需要注意的是VS2008中已经为路由事件添加了

下面第二个

//ON_COMMAND(ID_FILE_NEW,&CWinAppEx::OnFileNew)

已经被我注释,因为如果响应此处,后面的添加路由事件将不会响应

BEGIN_MESSAGE_MAP(CMutiDocAndViewApp,CWinAppEx)

        ON_COMMAND(ID_APP_ABOUT,&CMutiDocAndViewApp::OnAppAbout)

        //基于文件的标准文档命令

        //ON_COMMAND(ID_FILE_NEW,&CWinAppEx::OnFileNew)

        ON_COMMAND(ID_FILE_OPEN,&CWinAppEx::OnFileOpen)

        //标准打印设置命令

        ON_COMMAND(ID_FILE_PRINT_SETUP,&CWinAppEx::OnFilePrintSetup)

        ON_COMMAND(ID_FILE_NEW,&CMutiDocAndViewApp::OnFileNew)

END_MESSAGE_MAP()

所以必须注释这里下面给响应函数OnFileNew代码

CMutiDocAndViewApp* app =(CMutiDocAndViewApp*)AfxGetApp();

        POSITIONpos =  app->GetFirstDocTemplatePosition();

        CMultiDocTemplate*temp = (CMultiDocTemplate *)app->GetNextDocTemplate(pos);

        temp->OpenDocumentFile(NULL);

其实就是调用文档模板类的

OpenDocumentFile()函数

其内部创建子框架、视图、文档对象,直管调用就好,MSDN示例程序都这么给的,应该没坏处。其实就是手动响应了新建操作,这里当然只能建现在的这种类型,代码显示的是第一个模版至于另外的模版可以对应的修改,这里不列出代码。多文档程序把握好了多文档模版就没有问题了模版的几个参数可以任意给,View、Doc、ChildFrame,可以公用的,比如创建多视图,只需要不同的模版关联View不同就可以了Doc类不变,其它的两个可以任意组合,各种效果控制很方便。单文档多视图,其实也是类似的,因为文档模版类来管理关联这些就需要结构体CCreateContext其需要设置的就是Doc类然后作为窗口的参数创建

视图CreateView时会传入这个结构参数,这样视图就关联了这个文档,多视图就解决了!

多视图、多框架概念上不难,把握好了视图、文档关联的因素一切迎刃而解,MSDN很强大,大家运行MSDN例子注意下,默认的那个工程是VS2005的,

而且默认是64位操作系统的,所以改下配置为WIN32程序,不然没法运行的,以上对于熟悉的人可能更好理解,需要一定的基础,今天研究了一天的成果

留个纪念自己以后看

有不妥之处还望指正(之前排版有问题,修改了几次)。

 






你可能感兴趣的:(MFC,MFC,多文档多视图)