函数功能:实现两个对话框间的通信。父窗口通过点击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);
}
运行效果:
转载于:https://blog.51cto.com/whatever957/1565349