VC++ 窗口调用问题

来源:百度知道 编辑:UC知道 时间:2024/05/25 09:59:02
A窗口调用B窗口,B窗口经过一些列操作然后将一个值返回给A窗口,除了让B窗口发消息,然后让A窗口接受,并且设置一个全局变量让两个窗口公用以外,还有什么别的方法吗?

还有两种方法:

1、假设你用的模式对话框,在B对话框类中定义一个变量int m_nA,当关闭B时给它赋值,

然后在A中这样获得这个值:

CBDlg DlgB;
DlgB.DoModal();//显示对话框B
//在对话框关闭后取值
int a = DlgB.m_nA;

2、假设你的a窗口类为CADlg,对应文件为ADlg.cpp和ADlg.h(当然它不一定是对话框)
假设你的b窗口类为CBDlg,对应文件为BDlg.cpp和BDlg.h(B也不一定是对话框)

BDlg.cpp中要#include "ADlg.h"
然后在B中,你需要给A赋值的地方:

CADlg *DlgA = (CADlg *)GetParent();

DlgA->m_a = 1000;//这样就可以直接对A中的变量赋值了

如果是模态对话框的话,可以通过DoModal的返回值来做这个事,这个值就是EndDialog的参数。
即:
如果在A中打开了B
B b;
UINT nRet = b.DoModal();
那么当在B中调用EndDialog(200);
那么nRet就是200了。

如果是其他方式的话个人认为发送消息比较安全。

B窗口类中建立一个public属性的成员,B操作完成后
A可直接调用

方法多了,如果B是A的子窗口的话,B就可以获得A的句柄,于是A和B就联系起来了,然后就像直接在A中使用一样调用A中的方法;如果A和B是两个进程的话,可以使用进程间通信的一些方法如管道,邮箱什么的传递信息。

呵呵,到目前位置,操作系统也只能这样操作。

可以使用消息发送的方法SendMessage()