虽然没碰到过多少,至少现在遇到了以下几种变量传递的情况:1。主窗口向子窗口传递;2。子窗口向主窗口传递;3。子窗口间互相传递;下面分别介绍。
一、主窗口向子窗口传递变量
1、 在主窗口中如是全局变量,可在子窗口中直接用extern声明而在子窗口中直接用,前提是必须包含主窗口的头文件。例如:主窗口CMainDlg,子窗口CSub,在主窗口中定义全局变量int temp;temp = 22;,可在CSub中直接用extern int temp;然后随便自己怎么去用.
2、在主窗口中如是成员变量或成员函数,则可以直接用CMainDlg *parent = (CMainDlg*)GetParent();然后parent->*******就可以了。
3、CMainDlg创建CSub,CSub创建CSubSub,则在CSubSub中也可以用CMainDlg *parent = (CMainDlg*)GetParent();来调用CMainDlg中的函数与变量,方法同2。
二、子窗口向主窗口传递变量
CSub dlg; dlg.m_temp = &m_main_temp; dlg.DoModal(); 其中m_temp是CSub中定义的public的指针,m_main_temp是CMainDlg中public的成员变量,它们的类型要保持一致。不过这种传递方法是在子窗口关闭后变量值才能传到主窗口中。
三、子窗口间变量传递
如是全局变量,可直接用extern来声明,方法和上面的一样。如果不是全局变量,则需要得到相应对话框的指针或句柄,然后用指针或句柄去操作其中的变量或函数。如
HWND hwnd;
hwnd=::FindWindow(NULL, "关机或重启"); //找到对话框标题为“关机或重启”的对话框
CWnd *p=FromHandle(hwnd);
p->***************;
其实传递变量的方法很多,可以通过发送消息;可以在子窗口中保存主窗口句柄,利用此句柄访问;可以在主窗口中保存子窗口句柄,主窗口调用此句柄方法也就是子窗口的put方法传递;可以在子窗口的构造函数中传递一个参数,在主窗口构建子窗口的时候传进去。这里只介绍了其中的一点点,有需要的朋友可以自己去研究,呵呵……另外附上几个我以前用MFC时发的帖子,希望对大家有所帮助。
http://community.csdn.net/Expert/topic/5369/5369722.xml?temp=.3070032
http://community.csdn.net/Expert/topic/5421/5421410.xml?temp=.741482
http://community.csdn.net/Expert/topic/5421/5421598.xml?temp=.6908838
http://community.csdn.net/Expert/topic/5376/5376157.xml?temp=.8486139