在无模式对话框中,用什么代替模式对话框中的“if ( dlg.DoModal() == IDOK )”语句?!模式对话框中语句:
if ( dlg.DoModal() == IDOK )
  {
     do  something;
  }无模式对话框中用什么来替代呢?!请前辈赐教!!!

解决方案 »

  1.   

    无模式create之后会继续之后的程序...所以没有办法实现模式对话框那样的中断
      

  2.   

    这样写.....while(dlg.GetSafeHwnd()){
         ; //nothing to do
    }....
      

  3.   

    你可以在对话框中的wm_close中给主窗口发一个自定义消息.
      

  4.   

    在Dlg中的IDOK()中实现,用传给dlg的pView run function of View.
      

  5.   

    回复人: ygzdev(TheEcho) ( ) 信誉:99  2004-05-09 15:36:00  得分:0 
     
     
      这样写.....while(dlg.GetSafeHwnd()){
         ; //nothing to do
    }....
      
     
    ==================
    这样的话,消息循环处于停止状态,所有的消息得不到处理.程序只能是当掉.
      

  6.   

    在View中,
    if(m_pdlg->GetSafeHwnd()==0){
    m_pdlg->Create();         //m_pdlg 为view 里的一个指针,指向无模式对话框
    }   在对话框里,重载构造函数和Create函数
    CSettingDlg::CSettingDlg(CView *pView)
    {
    m_pView = pView;           //m_pView 为Dlg所属的View 指针
    }BOOL CSettingDlg::Create()
    {
    return CDialog::Create(CSettingDlg::IDD);

    }然后在BOOL SettingDlg::OnInitDialog() 
    {
    CDialog::OnInitDialog();
             return true;
    }
    里设定对话框上东西的属性至于在对话框里的操作可以用自定义消息,发送到View 里处理
    如void CSettingDlg::OnCancel() 
    {
    // TODO: Add extra cleanup here
    if(m_pView!=NULL){
    m_pView->PostMessage(WM_GOODBYE,0,0);
    }
    //CDialog::OnCancel();
    }void CAxisSettingDlg::OnOK() 
    {
    // TODO: Add extra validation here
    if(m_pView!=NULL){
                      //你要操作的代码
    UpdateData(TRUE);
    m_pView->PostMessage(WM_GOODBYE,0,0);
    }
    //CDialog::OnOK();
    }
    再在OnGoodBye的处理函数中用m_pdlg->DestroyWindow()函数destroy掉对话框
      

  7.   

    假设非模式对话框类名为CTwoDlg
                   ID号为IDD_TWO_DIALOG
    在主窗口头文件中类的定义中加入
                              CTwoDlg* m_pTwoDlg;
    别忘在最上边加入#include "TwoDlg.h"然后用{ m_pTwoDlg=new CTwoDlg(this);
    m_pTwoDlg->Create(IDD_TWO_DIALOG,this);
           }代替if ( dlg.DoModal() == IDOK )
      {
         do  something;
      }