从模态对话框中可以用下述方法知道用户是点了OK还是Cancel:
CMyDlg dlg;
if (IDOK == dlg.DoModal())
{
...//OK button is clicked
}
else
{
..//Cancel button is clicked
}但是,对于非模态对话框呢?
我的非模态对话框建立的代码为:
CMyUnmoduleDlg m_dlgTest;//Defined in .h fileCFatherWnd::ShowMyDlg()
{
m_dlgTest.Create(IDD_UNMODULEDLG, this);
m_dlgTest.ShowWindow(SW_SHOW);//我想在这儿拿返回值
}问题是,怎么得到它的返回值呢?请高手帮忙!!

解决方案 »

  1.   

    ShowWindow立即就返回了,因为是非模态的!如果你需要在非模态窗口退出时得到些参数,可以在OnDestory时,给父窗口发送个消息,或者自定义一个回调函数
      

  2.   

    你无非是想在Dialog返回IDOK的时候做一些处理,可以使用自定义消息,添加消息处理函数,在消息处理函数中完成你想在Dialog返回IDOK时做的处理。
      

  3.   

    事实是,CREATE这个窗口的类收不到消息
      

  4.   

    头文件中:
    #define WM_DLG_OK (WM_USER + 101)afx_msg LRESULT OnDlgOnOK(WPARAM wParam, LPARAM lParam);
    CPP文件中:
    ON_MESSAGE(WM_DLG_OK,OnDlgOnOK)
      

  5.   

    使用::PostMessage(m_MessageHwnd,WM_DLG_OK,0,0);
    m_MessageHwnd应该是Create的时候使用GetSafeHwnd获得的,可以在DLG中定义一个m_MessageHwnd成员变量!
      

  6.   

    谢谢各位,问题是CFatherWnd其实不是一个窗口(是我写法有误,sorry).它收不到消息。
      

  7.   

    CMyUnmoduleDlg加一个public的变量UINT m_nRet;
    不就行了
      

  8.   

    看来也不行。创建者是一个COM的接口涵数,不能这样用的。
      

  9.   

    在父对话框中添加成员函数 
    void CFatherWnd::ModelessDialogClose( UINT ID )
    {
        if ( ID == IDOK )
            // ...
        else if ( ID == IDCANCEL )
            // ...
    }在无模式对话框的 OnOK 和 OnCancel 函数中添加代码:
    ( ( CFatherWnd* ) GetParent() ) -> ModelessDialogClose( IDOK );   // 或 IDCANCEL
    DestroyWindow();注意头文件的包含