函数功能:实现两个对话框间的通信。父窗口通过点击openSubDlg按钮(IDC_BTN_OPEN)弹出子对话框(非模态),通过点击Send按钮(IDC_BTN_SEND)实现将编辑框中(IDC_EDIT_SEND)的内容发送到子对话框的编辑框(IDC_EDIT_RECEIVE)内容。同理,子对话框可通过点击Send按钮(IDC_BTN_SEND)实现将其编辑框中的内容发送给父对话框的编辑框。


实现方法:对父对话框来说:通过::FindWindow()方法找到子对话框的句柄,在通过::GetD两个Item()方法找到子对话框中的编辑框控件句柄,最后通过::SetWindowText()方法将父编辑框内容发送到子编辑框中。反之亦然。


代码:

1.在OnInitDialog(或OnCreate())中设置对话框标题,方便通过::FindWindow()找到句柄。这里,将父对话框标题设为Parent,子对话框标题为SubDialog。

父对话框:
2.双击OpenSubDlg按钮,添加单击事件响应:

void CSendMessageDemoDlg::OnBtnOpen() 
{
	// TODO: Add your control notification handler code here
	CSubDlg *subdlg = new CSubDlg;
	BOOL flag = subdlg->Create(IDD_SUBDIALOG1,NULL);
	if(!flag)
	{
		MessageBox("Open SubDlg Failed");
	}
	subdlg->ShowWindow(SW_SHOWNORMAL);
}

3.双击Send按钮,添加单击事件响应:
void CSendMessageDemoDlg::OnBtnSend() 
{
	// TODO: Add your control notification handler code here
	CString str;
	GetDlgItemText(IDC_EDIT_SEND,str);
	HWND hSub = ::FindWindow(NULL,"SubDialog");
	if(hSub == NULL)
	{
		MessageBox("Failed to find SubDialog");
		return;
	}
	HWND hEdit = ::GetDlgItem(hSub,IDC_EDIT_RECEIVE);
	if(hEdit == NULL)
	{
		MessageBox("Failed to find SubDialog's control");
		return ;
	}
	::SetWindowText(hEdit,str);
}

子对话框
4.双击双击Send按钮,添加单击事件响应:
void CSubDlg::OnBtnSend() 
{
	// TODO: Add your control notification handler code here
	CString str;
	GetDlgItemText(IDC_EDIT_RECEIVE,str);

	HWND hParent = ::FindWindow(NULL,"Parent");
	if(hParent == NULL)
	{
		MessageBox("Fail to find Parent's Handle");
		return;
	}
	HWND hEdit = ::GetDlgItem(hParent,IDC_EDIT_SEND);
	if(hEdit == NULL)
	{
		MessageBox("Fail to Search the Control");
		return;
	}
	::SetWindowText(hEdit,str);
}

运行效果:

wKioL1RBQHTgqLCNAACpppqQhA0949.jpg


wKiom1RBQEWBxohKAAC0YM3ydtc774.jpg