RT,我在写一个图像融合的程序,使用MFC的多文档界面。我主要有两个问题:现在我的设想是这样,程序一启动什么都不做,只弹出一个对话框要求输入处理路径,然后确定,将路径传入文档,调用文档中的处理函数进行操作。但是问题来了,对话框显示的操作代码(dlg.Domodal())要写在哪里?
按理来说,既然是传值给文档成员变量,那么对话框的调用一定是在文档的某个成员函数中实现对吧,我找到的SDI的操作是这样的:
文档中建立一个处理函数openfile()来执行这个任务,然后在视图View的OnInitialUpdate()函数中,先获取当前文档的指针pDoc,再来调用这个openfile(),从而完成这一要求。但是实际在MDI操作中却不同,我如此试验的结果是:程序一开始运行并没有弹出对话框,而是在File--》New即新建的时候才弹出。并且以我的理解,这种对应于SDI的方法应该是不能应用于MDI的。那么,我应该如何写才能实现在MDI中把从程序一启动就弹出?
并且将该对话框输入的数据传给文档成员变量呢?

解决方案 »

  1.   

    你可以放在App类的InitInstance()函数中,放在这
    pMainFrame->ShowWindow(m_nCmdShow);
    pMainFrame->UpdateWindow();这两句以前就可以了,如CNewDlg dlg; dlg.DoModal();,至于传递路径,你可以在你的对话框的类的OnOK函数中
    CString strText(_T(""));
    GetDlgItemText(IDC_EDIT1, strText);
    ((CMainFrame*)AfxGetMainWnd())->SetStringText(strText);
    CDialog::OnOK();
    其中SetStringText是CMainFrame类的成员函数(public的,自己定义的,还定义一个CString成员函数接收字符串),下面的应该都会了吧
      

  2.   

    sdi创建的时候直接创建关联的视图
    而mdi只是创建框架窗口
    你在框架窗口的OnCreate里弹对话框就可以
    至于路径可以保存再一个全局变量中
    这样大家就可以公用了
      

  3.   

    哈哈,“回复内容太短了”,是系统提示。我本来打算回答这个问题的,结果进来VisualEleven xianglitian两位牛人都回答了。
    我就简单说了句“楼上的可行”,可是系统提示“回复内容太短了”,就随便拼凑了点内容发贴。