在一个单文档程序中,添加Splitter
然后CreateView生成多个View
请问,如果使得这几个View都和Doc关联(我在InitInstance函数里加入
AddDocTemplate (new CMultiDocTemplate(……, 
          RUNTIME_CLASS(……), 
          RUNTIME_CLASS(……), 
          RUNTIME_CLASS(……))); 
但是,程序运行之后会提示让我选择一个视图创建。请问这是什么意思???
这是否影响视图和Doc的映射关系?)不知道“文档--多视结构”具体是如何实现的。
有例子更好。

解决方案 »

  1.   

    建议楼主在VC/MFC大版内搜索“多视”,各种理论、例子应有尽有
      

  2.   

    你这个是“单文档-多模板”结构,这样会产生几个框架的(新建一个文件就会产生一个框架),如果只是想去掉那个选择框,也容易,就是把你添加模板的语句放在主框架产生之后就可以了你可能需要的是“单文档-多视图”的结构,如果是,则不能再添加模板,只新建视图就可以了,新建视图可以用CMainFrame类(实际上是它的基类CFrameWnd)的CreateView()函数,该函数的参数就可以绑定你的Doc,具体可以参考MSDN,也如楼上所说,这样的问题这里已经不少了,我回答的问题中就有类似的问题
      

  3.   

    http://community.csdn.net/Expert/topic/3634/3634611.xml?temp=.5491449
      

  4.   

    “你可能需要的是“单文档-多视图”的结构,如果是,则不能再添加模板,只新建视图就可以了”
    兄弟,你说对了,那就是说,我不需要AddDocTemplate 就Ok了???这个视图也是和Doc相关联的???
      

  5.   

    “你可能需要的是“单文档-多视图”的结构,如果是,则不能再添加模板,只新建视图就可以了”那在AddDocTemplate 中添加的那个View和其他View有什么区别?????????????????????????????????
      

  6.   

    是不是按照上边的方法
    AddDocTemplate 添加那个View 算是白添了????
      

  7.   

    没有牛人来解小弟疑惑?????其实我的意思
    <=>
    在AddDocTemplate 中添加一个 C鸟不拉屎View 也是可以的???
      

  8.   

    用了AddDocTemplate()函数,就肯定是多模板的了,多模板必定导致到框架,也就是说你要新建一个文档,它会重新弹出一个框架,这个框架的情况取决于你的3个RUNTIME_CLASS参数而我让你看的,用CreateView()函数,它的参数是CCreateContext* pContext,而CCreateContext类有如下参数:
    m_pNewViewClass
    m_pCurrentDoc
    m_pNewDocTemplate
    m_pLastView
    m_pCurrentFrame其中第一个参数就赋值为你的“C鸟不拉屎View”类,m_pCurrentDoc就赋值为你的文档,m_pNewDocTemplate为空或者不赋值,m_pLastView可以设为空,m_pCurrentFrame设为你的主框架指针,这样就OK了这些MSDN上都有,其实我前面说得很清楚了,好好利用工具,“利用”人,总是不那么方便
      

  9.   

    “回复人: fengqinggao(风清高) ”
    呵呵,老兄没看清我的意思啊我的意思事,如果我用了CreateView函数,那么即使是将原来InitInstance函数里的参数改为“C鸟不拉屎View”,也是可以的!结果是,我刚才试了一下,证实了上边的结论。
      

  10.   

    或者说,如果重载了OnCreateClient函数,并用Splitter CreateView
    那么,在InitInstance里AddDocTemplate 是不是多此一举了???
      

  11.   

    哦,明白了一些。
    但是,这么一来。本来在单文档里创建的View跑哪里去了???
    它还在吗???,在我重载OnCreateClient函数后。
      

  12.   

    在啊,如果你有几个View,最好每个View都在CMainFrame设置一个对应的类成员变量,即保留每个View的指针,这样你就可以随时通过它们的指针使它们处于激活(非激活)、显示(隐藏)状态了
      

  13.   

    呵呵,我喜欢在mainframe里面调用OnWindowNew();来产生新的View
      

  14.   

    to: fengqinggao(风清高):
    你说本来在单文档中创建的View还在是吧???
    那么现在它也没什么用,能不能不让程序创建啊。
    我用的View都是在OnCreateClient函数里创建的。
      

  15.   

    那你就没有必要新建View了啊,将原来那个View改为你所需要的不就OK了?将你的“C鸟不拉屎View”直接在创建模板时(在App类的初始化函数中)直接代替原来的RUNTIME_CLASS(C你的原来的View类),即RUNTIME_CLASS(C鸟不拉屎View),然后将你原来的View类删除;另一个方法是,通过修改,将你的原来的View类修改成你想要的View类;
      

  16.   

    我现在怀疑的是:
    如果重载了OnCreateClient后,在InitInstance里加入模板的那个View将不会被创建!
    不知道对不对?
      

  17.   

    果然,看了一下
    virtual BOOL OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext);
    是个虚函数!
    估计丫的,在CFrameWnd的该函数版本里,肯定是找到模板里的那个View,然后动态创建。
      

  18.   

    说得对不对啊?楼上得大哥。
    要不兄弟你给验证一下???此外,搞不懂,微软为什么把这几个类得构造函数搞成protected???
    非要动态创建不可。
      

  19.   

    你认为我花那么多时间写这么多东西,赚你这30分(就算都给我也就50分),值么?分?狗shi也!或者说,分要了有什么用?奇怪!我从1、4点上提醒你如何让自己的问题得到更快的回答,嘿嘿,居然得到这么个结果,我算是开眼界了我这么说,还有另外一个原因是,我上面大段大段的写,而且问题也确实解决了,嘿嘿,一个谢字都没有,只知道提问题,寒心而已!当然,最后还落个“赚分”的名声,就更加寒心了楼主还可以去看看我回答的别人的帖子,如果有任何赚分的嫌疑,让管理员封我的ID如何?当然,其他任何方法都可以!好没意思
      

  20.   

    呵呵,刚才才看清楚楼主的第二点解释,看来我真的得了白内障,拿热脸去贴人的冷pigu了;至于第三点,算我说疯话,楼主大人大量,别计较了,呵呵,对不起,打扰了