![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
vc 子窗口怎么调用父窗口的函数和变量啊?
mfc我用tabcontrol里面的窗口中调用主对话框中的函数和变量,怎么调用啊?希望给下例子,谢谢...
mfc 我用tab control 里面的窗口中 调用主对话框中的函数和变量,怎么调用啊?希望给下例子,谢谢
展开
展开全部
方法很多种。
★方法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.
★方法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.
展开全部
用GetParent()获取父窗口指针。
设你主对话框类为CMyDialog.
CMyDialog *pDlg = (CMyDialog *)GetParent()->GetParent();
pDlg->函数或变量;
第一个GetParent()获取的是tab control指针,再通过tab control获取主对话框指针。
设你主对话框类为CMyDialog.
CMyDialog *pDlg = (CMyDialog *)GetParent()->GetParent();
pDlg->函数或变量;
第一个GetParent()获取的是tab control指针,再通过tab control获取主对话框指针。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1. 首先要在父窗口中定义成public的变量与函数
2. 通过指针指向父窗口
3. 再进行调用 .
像CxxxDlg *pDlg=(CxxxDlg *)AfxGetMainWnd();
CxxxDlg *pDlg=(CxxxDlg *)myDlg.GetParent();
之类都行, 然后就使用pDlg->myVar pDlg->DoFun()就可以了.
给我个邮件, 我给你写个, 我邮箱: juncox@163.com
2. 通过指针指向父窗口
3. 再进行调用 .
像CxxxDlg *pDlg=(CxxxDlg *)AfxGetMainWnd();
CxxxDlg *pDlg=(CxxxDlg *)myDlg.GetParent();
之类都行, 然后就使用pDlg->myVar pDlg->DoFun()就可以了.
给我个邮件, 我给你写个, 我邮箱: juncox@163.com
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我和楼主遇到过同样的问题,一个对话框没法调用它的父窗口,不管是用GetParent(),GetParentOwner(),还是AfxGetMainWnd(),或者AfxGetApp()->m_pMainWnd,都不能获得它的父窗口,这是因为此时对话框占用了程序控制权。我所知的就一种方法:
那就是在对话框中定义一个CWnd* m_pParent;在构造函数中保存调用它时的参数CWnd* pParent,m_pParent=pParent;在创建对话框对象时,将父窗口指针传给它,C**Dialog dlg(this)
那就是在对话框中定义一个CWnd* m_pParent;在构造函数中保存调用它时的参数CWnd* pParent,m_pParent=pParent;在创建对话框对象时,将父窗口指针传给它,C**Dialog dlg(this)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
HWND hParent=::GetParent();
CWnd *wndParent=CWnd::FromHandle(hParent);
这样可以得到父窗口的指针,剩下的事,看你自己了...
CWnd *wndParent=CWnd::FromHandle(hParent);
这样可以得到父窗口的指针,剩下的事,看你自己了...
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询