MFC中在自已建的cpp(类)中调用主窗口控件方法

本文介绍了在MFC应用程序中,如何从自定义类访问主对话框的控件。主要方法是通过AfxGetApp()->m_pMainWnd获取主对话框指针,并使用GetDlgItem()来访问特定控件。此外,还提到了子对话框获取父对话框指针的三种方式,包括使用全局变量、在创建子对话框时传递指针和通过GetParent()函数。这些技巧对于在MFC编程中实现类间的交互非常实用。

之前一直在找有木有好点的方法。现在终于被我找到,收藏之~~~~~~
只是单纯的转载记录一下

在使用mfc的时候经常遇到自定义类访问主对话框控件的问题,例如自定义类中的方法要输出一段字符串到主对话框的EDIT控件、控制对话框的进度条等。
要在自定义的类中访问主对话框控件,须获得主对话框的指针。主对话框的对象在App类的InitInstance()方法中声明。查看App类的cpp文件,在InitInstance()方法中有如下语句:

   CAppDlg dlg;
   m_pMainWnd = &dlg;

主对话框指针被传给m_pMainWnd 成员,按f12查看其定义,发现m_pMainWnd 是在afxwin.h中声明的成员:

CWnd* m_pMainWnd;       // main window (usually same AfxGetApp()->m_pMainWnd)

由于MFC中的自定义类会自动包含stdafx.h头文件,且stdafx.h包含afxwin.h,因此根据注释,在自定义类中可以直接使用

AfxGetApp()->m_pMainWnd

来获取主对话框的指针。之后可通过

AfxGetApp()->m_pMainWnd->GetDlgItem(  )

来获得要访问的主对话框控件的指针,以对其进行访问。

下面是子对话框得到父对话框指针的方法
1.

extern CMainApp theApp;
CMainDlg* dlg = (CMainDlg*)theApp.m_pMainWnd;

获得主对话框指针就可以调用它的成员

2.主对话框创建子对话框时把this传入,那么在子对话框中就可以得到主对话的指针

3.用GetParent()获取父窗口指针。
设你主对话框类为CMyDialog.

CMyDialog *pDlg = (CMyDialog *)GetParent()->GetParent();
pDlg->函数或变量;

第一个GetParent()获取的是tab control指针,再通过tab control获取主对话框指针。

下面是通过全局变量的使用来获取对话框的指针
假设CMyDialog为对话框类

1.先在CMyDialog.cpp中声明一个全局变量CMyDialog* pDlg;

2在OnInitDialog()的时候,pDlg = this;

3.在别的类使用他的时候,在别的类的Cpp中添加extern CMyDialog* pDlg;

4.pDlg->yourfunction();

来源:http://blog.sina.com.cn/s/blog_624ca8080100rkeb.html(这个链接已经打不开了,但还是要转载一下出处)

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值