对SDI程序,点击菜单在文档类中调用了一个对话框(创建了一个对话框类的实例).
在对话框中点击一下按钮时,怎么把消息传到文档类中去?

解决方案 »

  1.   

    模式对话框? 
    应该可以用 AfxGetMainWnd来取得主框架的指针p. 再用p发送消息,让文档接收,不过文档类好像不接收非命令消息的.
      

  2.   

    我试过在对话框构造函数中加入Doc 的指针.
      

  3.   

    我要做实时的数据采集,当点击对话框按钮时,把这一时刻的数据保存到文档类中去.
    也就是要把消息传到文档类中去.TO:  xxqfperfect(勇仔) /  myhaocat(一天,一年,一世) 
        
         能不能说详细一点啊????
      

  4.   

    你是不是要响应button,后调用doc的函数啊.
      

  5.   

    TO myhaocat(一天,一年,一世):
       是的!
       
      对话框有一个标准的OK按钮,点击后可以执行:
        if(dataAcqDlg.DoModal()==IDOK)
    {
         // 对话框数据可以和文档类交互 }   现在我的对话框上还有SAVE和NEW按钮,我点击后希望分别进行如下的动作,怎么做?
    void CTestBedDoc::OnDocDataacquisition() 
    {
    CDataAcquisitionDlg dataAcqDlg;        if(dataAcqDlg.DoModal()==IDOK)
    {
         // 对话框数据可以和文档类交互1 }
             if(dataAcqDlg.DoModal()==IDSAVA)
    {
         // 对话框数据可以和文档类交互2 }
            else if(dataAcqDlg.DoModal()==IDNEW)
            {
              // 对话框数据可以和文档类交互2
            }}
        也就是怎么把消息传到文档类中去?
      

  6.   

    我是这样做的,
    在CTestdlg的头中加入class CTestdoc;
    .........
    pubilic:CTestDoc *m_pDoc;然后在构造函数中加入
    CTestDlg(CTestDoc *pDoc,....)
    {
        m_Doc=pDoc;
    }
      

  7.   

    DoModal()要么返回IDOK, 要么返回IDCANCEL,不会返回IDSAVA和IDNEW.
    所以要重载DoModal()函数
      

  8.   

    可以在对话框中定义一个自定义消息。
    #define WM_USERAPPLY WM_USER+5
    重写一个带参数的CDialog构造函数,参数为视图指针。
    响应button时调用:
    UpdateData(True);
    视图指针->sendmessage(WM_USERAPPLY);
    在view类中手工添加自定义消息的消息响应
    通过视图类的GetDocument函数访问文档类
      

  9.   

    刚才回去查了一下,DoModal()的返回值是EndDialog()函数的参数
    也就是说当你点击IDSAVE按扭的时候,在其响应函数里要加上如下语句:
         EndDialog(IDSAVE);
    这样做的话,就不需要重载DoModal()了.
      

  10.   

    我通过以下方式做保存数据的事:  
      if(dataAcqDlg.DoModal()==IDSaveStatusPoint)
    {          //  保存数据          }
    但保存后对话框不关闭.这要怎么做??另外,当点击退出对话框上的"关闭"按钮后,会弹出确认关闭对话框.点击"是"按钮后退出,怎么写代码啊?
       能不能替我更改一下代码???
    void CDataAcquisitionDlg::OnSaveStatusPoint() 
    {
    // TODO: Add your control notification handler code here
    EndDialog(IDSaveStatusPoint);
    }void CDataAcquisitionDlg::OnQuit() 
    {
    // TODO: Add your control notification handler code here
    // DialogResult result = MessageBox.Show(
    // "您确实要退出采集界面吗?",
    // MessageBoxButtons.YesNo,
    // MessageBoxIcon.Error
    // );
    //
    // if (result == DialogResult.Yes)
    // {
                      EndDialog(IDQuit);
    // }
    }void CTestBedDoc::OnDocDataacquisition() 
    {   CDataAcquisitionDlg dataAcqDlg;
       if(dataAcqDlg.DoModal()==IDSaveStatusPoint)
    {          //  保存数据          }
       else if(dataAcqDlg.DoModal()==IDQuit)
    {
    //    CDialog::OnCancel();
       }
    }
      

  11.   

    void CDataAcquisitionDlg::OnSaveStatusPoint() 
    {
    // TODO: Add your control notification handler code here
    EndDialog(IDSaveStatusPoint);
             OnQuit(); 
    }void CDataAcquisitionDlg::OnQuit() 
    {   if(AfxMessageBox(参数查一下MSDN)==IDOK)
       {
          CDialog::OnCancel();
       }}void CTestBedDoc::OnDocDataacquisition() 
    {   CDataAcquisitionDlg dataAcqDlg;
       if(dataAcqDlg.DoModal()==IDSaveStatusPoint)
    {          //  保存数据          }
       else if(dataAcqDlg.DoModal()==IDQuit)
    {
    //    CDialog::OnCancel();
       }
    }
    你调试一下看行不行.不行的话,发到我的油箱,我看看[email protected]
      

  12.   

    TO   myhaocat(一天,一年,一世):我再保存时不希望对话框销毁.  MSDN: The EndDialog function destroys a modal dialog box, causing the system to end any processing for the dialog box. 
      你也可以看看帖子:
    http://community.csdn.net/Expert/topic/3974/3974810.xml?temp=.9936334
      

  13.   

    决定还是用消息传递:对话框消息-->MAINFRAME响应---->调用文档类函数