首先给大家说说是什么错误:编译 连接都没有错误 只是运行最后一步的时候系统弹出对话框提示应用程序错误:CFFdlg.exe不能为read
下面我给大家说说我具体的程序以及代码
建立一个基于对话框的MFC应用程序。然后天添加两个子对话框 ID分别为 IDD—INPUT, IDD—SHOW。然后把这两个对话框与类相关联 CInputdlg ,CShowdlg, 在IDD-SHOW上添加一个静态文本框 (IDC_STATIC1) ,在IDD—INPUT上添加一个编辑框(IDC-EDIT1)和一个按钮(IDB-BUTTON1)
 
这样就有了三个对话框 ID 分别为IDD-FF , IDD—INPUT, IDD—SHOW。
在IDD-FF对话框上添加 两个按钮 标题分别为 显示用户对话框(IDB-BUTTON2)输入用户对话框(IDB-BUTTON3)当单击IDB-BUTTON1时显示IDD—SHOW,单击IDB-BUTTON2时显示IDD—INPUT。
给IDC-STATIC1添加成员变量 CString m_user,给IDC-EDIT1添加成员变量 CString m_user.
在类CFFdlg(生成的,IDD-FF)上添加成员变量 CInputdlg*In, CShowdlg*sh
这样界面设计就完成了 我要实现的功能是单击 显示用户对话框按钮(IDB-BUTTON2)时显示出对话框(IDD—SHOW) 然后单击输入用户对话框按钮(IDB-BUTTON3)显示出对话框(IDD-INPUT),在IDD-INPUT对话框中的编辑框中输入用户名后 单击IDB-BUTTON1 输入的用户名在IDD-SHO对话框上的IDC-STATIC1上显示出来下面给出具体的代码:
void CFFDlg::OnButton2() 
{
// TODO: Add your control notification handler code here
sh=new CShowdlg;
sh->Create(IDD_SHOW,this);
sh->ShowWindow(SW_SHOW);
}
void CFFDlg::OnButton3() 
{
// TODO: Add your control notification handler code here
In=new CInputdlg;
In->DoModal();}
#include "Showdlg.h"
void CInputdlg::OnButton1() 
{
// TODO: Add your control notification handler code here
CShowdlg*dlg=new CShowdlg;

GetDlgItem(IDC_EDIT1)->GetWindowText(m_user);
dlg->m_user=m_user;
OnOK();
}
代码虽然很简单但是为什么错呢 
编译连接都没有错误,只是在运行的时候错误 哪位高手指点指点
 补充:即使在PostNCDestory中用delete this 也不行
哪位照我上面的设计试试 如果成功的话麻烦把代码发来 谢谢 

解决方案 »

  1.   

    这些信息貌似看不出问题你不应该用delete this.你应该在CFFDlg中delete sh;delete in;
    并且你的OnButton1中的dlg貌似没有delete dlg;
      

  2.   

    本帖最后由 greatws 于 2008-10-26 21:25:49 编辑
      

  3.   

    楼上方法Button1就没用了*_* LZ改写InputDlg的构造函数吧 把sh传进去 然后就是“你想怎样就怎样了,死鬼” 哈
      

  4.   


    Button1怎么会没用?OnOK()的作用就是UpdateData(TRUE)和销毁对话框,即把用户输入到edit里的文本存到变量中,然后从外部取出就行了阿
      

  5.   

    我是想在OnButton1() 中实现上述功能啊 
    还有问你个问题 你能给我讲讲OnOK()的具体实现方法吗 就是他怎么会调用UpdateData(TRUE)了 我只知道他可用来销毁对话框
    非常感谢你 
      

  6.   

    本帖最后由 greatws 于 2008-10-27 22:07:32 编辑
      

  7.   


    delete sh后 这个对话框是一闪而过的 因为他的对象销毁了  
    还是谢谢你 我的问题还没解决  好郁闷
      

  8.   

    #include "Showdlg.h" 
    void CInputdlg::OnButton1() 

    // TODO: Add your control notification handler code here 
    CShowdlg*dlg= sh; //.....GetDlgItem(IDC_EDIT1)->GetWindowText(m_user); 
    dlg->m_user=m_user; 
    OnOK(); 

      

  9.   

    此问题正在等待解决 再次说明一下 我是 要在OnButton1() 中实现
    谢谢大家
      

  10.   

    OnButton2()
    OnButton3()
    函数里面的你的代码后面都要加上UpdateData(false),这样才能把你输入的数据传进去
    OnButton1()在你代码之前要加上UpdateData(true),从对话框读数据.
    我看了觉得问题一定是在这里
      

  11.   

    我改动你的OnButton1(),其他没变,你自己琢磨看看,你要的功能已经实现
    void CInputdlg::OnButton1() 
    {
    // TODO: Add your control notification handler code here
    UpdateData(true);
    CShowdlg*dlg=new CShowdlg; 

    GetDlgItem(IDC_EDIT1)->GetWindowText(m_user); 
    dlg->m_user=m_user;  
    dlg->DoModal(); 
    UpdateData(false);
    }
      

  12.   

    楼主是个初学者,里面有几个问题需要注意:
    1.子对话框的窗口,不能每次都new但是不delete,其实也只需要new一次
    2.关于子窗口之间、子窗口和父窗口之间的参数传递可以通过public变量实现,事件响应可以通过父窗口的public函数实现
    3.类变量一定要初始化,并在引用的时候判断下面我修改的代码,大小写之类的你自己修改吧:
    void CFFDlg::CFFDlg()
    {
    sh=new CShowdlg;
    in=NULL;
    }void CFFDlg::OnButton2() 

    // TODO: Add your control notification handler code here 
    if(sh==NULL)
      sh=new CShowdlg; if(sh->m_hWnd == NULL)
      sh->Create(IDD_SHOW,this); 
    sh->ShowWindow(SW_SHOW); 

    void CFFDlg::OnButton3() 

    // TODO: Add your control notification handler code here 
    if(In==NULL)
    In=new CInputdlg; 
    In->m_pWndShow = sh;
    In->DoModal(); } 在"inputdlg.h"中增加声明
    class CShowdlg;
    CInputdlg public:CDialog
    {
    public:
    CShowdlg*  m_pWndShow
    }
    #include "Showdlg.h" 
    void CInputdlg::CInputdlg()
    {
    m_pWndShow=NULL;//饱含初始化
    }
    void CInputdlg::OnButton1() 

    // TODO: Add your control notification handler code here GetDlgItem(IDC_EDIT1)->GetWindowText(m_user);
    if(CShowdlg) 
    {
    m_pWndShow->m_user=m_user; 
    m_pWndShow->UpdateData(FALSE);
    }
    OnOK();