对话框之间数据的传输

父类向子类传递

我们知道我们创建的子类对话框不管是模态还是非模态都是在父类中创建的,因此从父类获取子类的句柄和对象很简单

void C对话框之间数据的传输Dlg::OnBnClickedButton1()
{
	cMTDialog* m_child_mt = new cMTDialog;
	bool Bret = m_child_mt->Create(IDD_DIALOG1);
	if (Bret)
	{
		m_child_mt->SetDlgItemText(IDC_EDIT1, TEXT("神人博客:deitylei.cn"));
		m_child_mt->ShowWindow(SW_SHOW);
	}
	// TODO: 在此添加控件通知处理程序代码
}
image.png

子类向父类传递

  1. 全局变量法 全局变量窗口指针 全局变量窗口句柄
    首先在主窗口cpp文件声明一个父窗口指针(Pmaindlg) = NULL 然后在头文件申明为全局变量 extern C对话框之间数据的传输Dlg* Pmaindlg;
    image.png

最后在主对话的初始函数中初始化这个变量 Pmaindlg = this;

  1. 获取父窗口指针法 Getparent()
  2. 参数传递法 (可能会发生重复包含的情况)
    image.png
  3. 通过app类获取法
    主窗口创建完毕 主线程类里面也会有主窗口类 因此可以通过afxgetapp->m_pMainWnd就是父窗口指针 然后可以强转为父窗口指针类型

子类向子类传递数据

image.png
我们可以通过福窗口指针 然后在父窗口类中增加两个交换数据的类对象 然后通过

void CDialogB::OnBnClickedButton1()
{
	C对话框之间数据的传输Dlg* pParentWnd = (C对话框之间数据的传输Dlg*)GetParent();
	pParentWnd->m_DialogA.SetDlgItemText(IDC_EDIT_A, _T("神人"));
}

以及

void CDialogA::OnBnClickedBtnSet2b()
{
	CMFCDlgFirstDlg* pParentWnd = (CMFCDlgFirstDlg*)GetParent();
	pParentWnd->m_DialogB.SetDlgItemText(IDC_EDIT_B, _T("你好VC驿站"));
}

这样就实现了 两个子窗口交换数据的目的
之所以我会重新搞俩个按钮 是因为我代码逻辑出现了问题 原因是控件ID被我弄得很乱 导致我运行程序崩溃 大家在使用mfc编程的时候 一定要注意命名规范!!!

类外函数调用窗口操作

如果我们在mfc创建一个全局函数 那么他是无法使用mfc类的函数的 当然也无法获取和修改窗口的内容

  1. 传递参数
void GetDlgEDIT(CWnd* pmainwnd)
{
	CString str;
	(C对话框之间数据的传输Dlg*)pmainwnd->GetDlgItemText(IDC_EDIT1, str);
	MessageBox(NULL, str, TEXT("tips"), MB_OK);
	HWND hPmainwnd = pmainwnd->GetSafeHwnd();//获取窗口句柄
	CWnd* Pwnd = CWnd::FromHandle(hPmainwnd);//从句柄获取窗口指针

}

我们可以把需要操作的窗口的指针传入我们自己的函数
可以通过
HWND hPmainwnd = pmainwnd->GetSafeHwnd();//获取窗口句柄
CWnd* Pwnd = CWnd::FromHandle(hPmainwnd);//从句柄获取窗口指针
::表示使用全局函数 未指定则使用mfc类库中的函数

  1. 全局变量
    这个就不说了 就是和前面一样申明为全局变量 然后使用 没有什么难度

网站标题:CV鼻祖洋芋

原创文章,作者:locus,如若转载,请注明出处:https://blog.cvpotato.cn/forward-code/293/

本博客所发布的内容,部分为原创文章,转载注明来源,网络转载文章如有侵权请联系站长!

(1)
上一篇 5天前
下一篇 5天前

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注