Mfc 的对话框里控件如何在外部函数调用
时间: 2024-06-09 16:05:27 浏览: 111
如果想在外部函数中调用对话框中的控件,可以通过对话框类的指针来实现。
首先在对话框类的头文件中声明一个指向该类的指针:
```
class CMyDialog : public CDialogEx
{
public:
CMyDialog(CWnd* pParent = nullptr); // 标准构造函数
virtual ~CMyDialog();
// 对话框数据
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_MYDIALOG };
#endif
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
// 实现
protected:
HICON m_hIcon;
// 生成的消息映射函数
virtual BOOL OnInitDialog();
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
public:
// 声明指向该类的指针
static CMyDialog* m_pDlg;
};
```
然后在对话框类的实现文件中对指针进行初始化:
```
CMyDialog* CMyDialog::m_pDlg = nullptr;
CMyDialog::CMyDialog(CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_MYDIALOG, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
// 初始化指针
m_pDlg = this;
}
```
接着,在外部函数中调用对话框类的指针,通过指针访问对话框中的控件:
```
void CMyClass::MyFunction()
{
// 获取对话框指针
CMyDialog* pDlg = CMyDialog::m_pDlg;
// 访问对话框控件
CString strText;
pDlg->GetDlgItemText(IDC_EDIT1, strText);
pDlg->SetDlgItemText(IDC_EDIT2, strText);
}
```
需要注意的是,如果对话框类的指针未初始化,调用对话框控件将会导致程序崩溃。因此,在调用对话框控件之前,一定要确保对话框类的指针已经初始化。
阅读全文