1. 模态对话框由父窗口传递参数给子窗口反过来感觉不太可能,还没看到类似的实现.主要原因在于,一旦调用DoModal()函数,控制权就会交给调用该函数的对话框,一直到点击了OK或CANCEL退出,而且只会返回有限的几种值,如IDOK,IDCANCEL 示例: [cpp] view plaincopy
注意:PopDlg 对象dlg(子窗口)不能调用UpdateData()函数,否则会出错。 在dlg的InitDlg()函数中,是否会有m_edit的处理。因为在DoModal()函数会自动调用InitDlg()。 这样,在点击了Pop按钮之后,就会弹出的对话框中m_edit关联的EDIT中显示“i love u”。 由子窗口传递参数给父窗口做实验发现,用非模态对话框的方法也可以。即:在子窗口中建立到父窗口的指针,然后给其成员变量赋值。 代码: [cpp] view plaincopy
[cpp] view plaincopy
2. 非模态对话框由父窗口传递参数给子窗口方法同模态对话框类似。 代码如下: [cpp] view plaincopy
[cpp] view plaincopy
注意:在使用非模态对话框时,如果用普通的变量,则该函数结束之后,变量的生存期就自动结束,所以窗口不会显示出来。 解决方法只能用指针(内存空间在栈上),或成员变量来解决。 个人觉得用成员变量更合适些,因为用指针会涉及到销毁问题,而析构函数并不知道该指针的地址,所以无法销毁,从而造成内存的泄露。 [cpp] view plaincopy
申明为指针便于动态进行构造,以免内存空间浪费。需要注意初始化。 [cpp] view plaincopy
由子窗口传递参数给父窗口假设父窗口对应类为ADlg,子窗口对应类为BDlg。 代码如下: [cpp] view plaincopy
[cpp] view plaincopy
非模态对话框的一个问题在于,调用CDialog的OnOK()函数时,会隐藏该对话框,而非销毁,所以需要调用DestoryWindow()函数来销毁窗口自己。 最佳方法: 是在看孙鑫的VC视频的时候看到的,确实是高人呀! 由于非模态对话框的执行并不会阻塞主对话框的执行,所以大多数时候只能用模态对话框。 对话框在执行DoModal()函数后,返回的时候窗口被销毁,但该对象仍然存在,所以仍然可以访问其中的成员变量。 示例如下: [cpp] view plaincopy
[cpp] view plaincopy
[cpp] view plaincopy
|
|