从一个对话框创建一个非模式对话框,然后将主对话框隐藏,
在这个新生成地对话框中还希望创建一个模式对话框,来实现第二个生成的非模式对话框不能进行任何操作。
但是在执行DoModal时出系统错误。第3个对话框为非模式对话框时就可以生成。
如果用非模式对话框也能实现目的地话也可以,不知道怎么实现啊?想达到的目的:
显示第三个对话框后,第二个生成的非模式对话框不能进行任何操作。

解决方案 »

  1.   

    1. 第二个非模式对话框是第一个对话框的全局或成员变量/成员指针变量
    2. 第三个模式对话框可以由第二个对话框定义一个局部变量就可以 DoModal()的。
      

  2.   

    我就是这样做的,但DoModal时会出错啊
      

  3.   

    我是通过下面这种做法做的:
    CAlertMsg *m_pAlertMsg;
    m_pAlertMsg = new CAlertMsg(this);
    m_pAlertMsg->Create(IDD_ALERT_MSG);
    m_pAlertMsg->DoModal();               ->会出错。当在头文件中定义的不是对话框的指针,直接定义对话框变量
    CAlertMsg m_pAlertMsg;
    然后在需要的时候DoModal,这样不会出错,但和第二个对话框却没有任何联系,两个对话框都是激活状态,
    好像同第一个Dialog是父子关系,因为将第二个非模式Dialog关闭后,只有第三个是激活状态,第一个Dialog不可用,必须等第三个Dialog关闭后才可以使用。
      

  4.   

    m_pAlertMsg-> Create(IDD_ALERT_MSG); //这个不要吧
      

  5.   

    在头文件中定义CAlertMsg的对象
    CAlertMsg m_AlertMsg;
    然后直接使用domodal显示:
    m_AlertMsg.DoModal();
    怎么将本窗口(第二个非模式Dialog)的指针传进去?
    正常地模式dialog好像只要这样就可以了,但实际地运行效果是第三个Dialog可以显示,但其父窗体却是第一个已被隐藏了的Dialg用下面地方法做时会出错
    CAlertMsg   *m_pAlertMsg; 
    m_pAlertMsg   =   new   CAlertMsg(this); 
    m_pAlertMsg-> Create(IDD_ALERT_MSG); 
    m_pAlertMsg-> DoModal();     -> 会出错。
      

  6.   

    m_pAlertMsg->   Create(IDD_ALERT_MSG);   是不要
    写错了,不好意思。
    但这样实际运行效果是第三个Dialog的父窗体却是第一个已被隐藏了的Dialg 
      

  7.   

    可以了,谢谢shunruo 的回答。但还有个问题,原先第三个Dialog用非模式时可以在第二个Dialog中调用DestroyWindow()来关掉第三个Dialog,
    现在用模式Dialog该怎么实现呢?
      

  8.   

    看来还是得用无模式方式来做,用模式Dialog做地话,有几个会被执行地地方却执行不到,算了还是换成无模式地吧。