我想修改MFC向导生成的多文档程序;让程序开始运行的时候不要出现子视图,点击“新建”的时候用自己的代码生成一个子视图。
本人新手,文档视图结构也看了一些,但不会用。希望贴点代码出来,也可把整个项目发到
[email protected]

解决方案 »

  1.   

    不用什么代码在 APP 的初始化里面,把 CCommandInfo 类实例中的新建文档干掉就了为了给你有个更好的理解,不给你写代码,教你如何做
    在App.InitInstance()中
    找到 CCommandInfo cmdInfo; 在这附近加一个断点,运行到这里后使用F11跟进去.你可以看到MFC提供的源代码,有你需要的一个参数实际上,为了解决用户双击时打开文档,你应当分析当前命令是否是 filenew 如果是,你才能删除之,否则不能修改.要不然打不开用户双击的文档.
      

  2.   

    在应用程序InitInstance函数中不调用ProcessShellCommand就可以了。
      

  3.   


    晕,有人来抢分,我把代码给我写好了BOOL C???????App::InitInstance()
    {
            ..... // Parse command line for standard shell commands, DDE, file open
    CCommandLineInfo cmdInfo;
    ParseCommandLine(cmdInfo); if( CCommandLineInfo::FileNew == cmdInfo.m_nShellCommand )
    cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing; // Dispatch commands specified on the command line
    if (!ProcessShellCommand(cmdInfo))
    return FALSE;
    .........}
      

  4.   

    To:Saimen
    呵呵!帮了忙的都有分。
    你那个方法不错,
    接下来我点击“新建”创建一下视图怎么做?
      

  5.   

    什么都不用做,原框架程序会自动调用 APP::OnFileNew
      

  6.   

    在app的InitInstance里面把把语句改为发下:
    CCommandLineInfo cmdInfo;
    ParseCommandLine(cmdInfo);
    cmdInfo.m_nShellCommand=CCommandLineInfo::FileNothing;//加上这句 // Dispatch commands specified on the command line
    // if (!ProcessShellCommand(cmdInfo))///去掉这两句就OK了。
     // return FALSE;
      

  7.   

    接下来什么都不用做了你的 APP 类直接响应了 ID_FILE_NEW 命令
    我明明回过的,怎么没有了?
      

  8.   

    问题是我还要在OnFileNew中作一些处理再生成视图。
      

  9.   

    第一个问题很简单,嗖嗖就好,后面那个问题稍复杂点,需要你重新注册自己的文档模板,给个提示吧,重载你的app的,然后直接调用基类的 OnFileNew, 设个端点跟进去,看看mfc如何做的就好了
      

  10.   

    JF&QF有什么处理非得在OnFileNew中进行啊,,还有构造函数,还有初始化函数呢
      

  11.   

    生成视图后想做些事再显示,有两种情况,操作在视图中和在视图外如果想在视图类里做些操作,那么
    重载 CView::InitUpdate() 应该是这个函数
    生成新的框加后,立即调用了该函数
    如果想在视图类外做些操作,那么自己重载 OnFileNew
    完了后再调用 APP::OnFileNew
      

  12.   

    TO Saimen 
    “CWinApp::OnFileNew”: 无法访问 protected 成员(在“CWinApp”类中声明)
      

  13.   

    我晕你重载 ONFileNew 是直接使用APP 类来重载的...classwizard 中选中 yourApp 类,再选中 ID_FILE_NEW 添加响应函数......  CYourAPP::OnFileName(...)
    {   CWinAPP::OnFileNew();
    }
    最后大概是这样的
      

  14.   


    看在楼主晚上十一点还在努力就回个贴咯一般来说 MDI 启动时不想打开文档就修改启动参数就可以了在APP 的initinstance函数里
    CCommandLineInfo cmdInfo;
    ParseCommandLine(cmdInfo);cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing;至于[新建]则在MainFrame 类中使用::AfxGetApp()->OpenDocumentFile(NULL)就可以了如果涉及到多文档或多视图,那么使用::AfxGetApp()->m_pDocManager找到相应的DocTemplate;再用 DocTemplate->OpenDocumentFile(NULL) 即可
      

  15.   

    TO: Joephia
    你的方法能行,
    我还想知道AfxGetApp()->OpenDocumentFile(NULL)生成的是那个视图的模板,我想修改这个默认视图。
      

  16.   


    void CSearchView::OnFileNew()
    {
     //TODO: 在此添加命令处理程序代码
    CCondition cc;
    if(cc.DoModal() == IDOK)
    {
    CCommandLineInfo cmdInfo;
    AfxGetApp()->ParseCommandLine(cmdInfo);
    //ParseCommandLine(cmdInfo);
    if (!AfxGetApp()->ProcessShellCommand(cmdInfo))
        return;
    //AfxGetApp()->OpenDocumentFile(NULL);
    }
    }这用这样的代码也能达到自己想要的效果,和你的有什么区别?
      

  17.   

            CCommandLineInfo cmdInfo;
            AfxGetApp()->ParseCommandLine(cmdInfo);
            //ParseCommandLine(cmdInfo);
            if (!AfxGetApp()->ProcessShellCommand(cmdInfo))
                return;
            //AfxGetApp()->OpenDocumentFile(NULL);可以处理的选项多点,我的是简化了,没其它参数,另外可以揭帖了
      

  18.   

    To Joephia
    晕啊,不行!原来是我自己的代码生成的视图。。