vc 子窗口怎么调用父窗口的函数和变量啊?

mfc我用tabcontrol里面的窗口中调用主对话框中的函数和变量,怎么调用啊?希望给下例子,谢谢... mfc 我用tab control 里面的窗口中 调用主对话框中的函数和变量,怎么调用啊?希望给下例子,谢谢 展开
 我来答
百度网友1d8e8b9
2009-06-21 · TA获得超过913个赞
知道小有建树答主
回答量:589
采纳率:60%
帮助的人:320万
展开全部
方法很多种。

★方法1
1、在主对话框类中加入:friend class YourChildWndClass;
2、访问的时候:(( CYourMainDlg * ) GetParent())-> m_SomeVal;
3、如果窗口的父窗口不是主对话框窗口,那么可以修改子窗口的构造函数,或者添加一个方法用来设置主对话框窗口句柄。并且在需要访问的窗口类中添加一个成员变量用来保存主对话框句柄。例如:
CYourChildWnd::CYourChindWnd( CYourMainDlg * pMainDlg ) : m_pMainDlg( pMainDlg )
{
....
}
需要访问的时候: m_pMainDlg->m_SomeVal;

当然,如果知道主对话框是子窗口的爷爷,也可以GetParent()->GetParent();

★方法2
1、使用消息进行通信,注册消息。添加消息:UINT WM_ACCESS = ReginsterWndMessage();
或者直接定义 #define WM_ACCESS ( WM_USER + 1 )
2、定义变量序号:
#define SOMEVAL1 1
#define SOMEVAL2 2
..........

3、访问时:
int someval = (int) GetParent()->SendMessage( WM_ACCESS, SOMEVAL1, 0L );

4、主对话框中添加消息映射:
WM_MESSAGE( WM_ACCESS, OnAccess );

5、主对话框类中添加消息处理:
LREUSLT CYourMainDlg::OnAccess( WPARAM wParam, LPARAM lParam )
{
if( wParam == 1 )
return m_Val1;
else if( wParam == 2 )
return m_Val2;
..........
}

6、如果父窗口不是主对话框,参考方法1.
何处淬吴钩
推荐于2017-09-08 · TA获得超过5043个赞
知道大有可为答主
回答量:2947
采纳率:50%
帮助的人:2395万
展开全部
用GetParent()获取父窗口指针。
设你主对话框类为CMyDialog.
CMyDialog *pDlg = (CMyDialog *)GetParent()->GetParent();
pDlg->函数或变量;
第一个GetParent()获取的是tab control指针,再通过tab control获取主对话框指针。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Juncox
2009-06-14 · TA获得超过1638个赞
知道大有可为答主
回答量:1904
采纳率:0%
帮助的人:1589万
展开全部
1. 首先要在父窗口中定义成public的变量与函数
2. 通过指针指向父窗口
3. 再进行调用 .

像CxxxDlg *pDlg=(CxxxDlg *)AfxGetMainWnd();
CxxxDlg *pDlg=(CxxxDlg *)myDlg.GetParent();
之类都行, 然后就使用pDlg->myVar pDlg->DoFun()就可以了.

给我个邮件, 我给你写个, 我邮箱: juncox@163.com
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jack5759990
2009-06-24 · 超过25用户采纳过TA的回答
知道答主
回答量:54
采纳率:0%
帮助的人:59.9万
展开全部
我和楼主遇到过同样的问题,一个对话框没法调用它的父窗口,不管是用GetParent(),GetParentOwner(),还是AfxGetMainWnd(),或者AfxGetApp()->m_pMainWnd,都不能获得它的父窗口,这是因为此时对话框占用了程序控制权。我所知的就一种方法:
那就是在对话框中定义一个CWnd* m_pParent;在构造函数中保存调用它时的参数CWnd* pParent,m_pParent=pParent;在创建对话框对象时,将父窗口指针传给它,C**Dialog dlg(this)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fanchangyong08
2009-06-18 · TA获得超过660个赞
知道小有建树答主
回答量:1096
采纳率:0%
帮助的人:0
展开全部
HWND hParent=::GetParent();
CWnd *wndParent=CWnd::FromHandle(hParent);

这样可以得到父窗口的指针,剩下的事,看你自己了...
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式