标签:对话框 通信 对话框非模态 ::findwindow() ::getdlgitem ::setwindowtext
函数功能:实现两个对话框间的通信。父窗口通过点击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); }
运行效果:
本文出自 “whatever957” 博客,请务必保留此出处http://whatever957.blog.51cto.com/6835003/1565349
标签:对话框 通信 对话框非模态 ::findwindow() ::getdlgitem ::setwindowtext
原文地址:http://whatever957.blog.51cto.com/6835003/1565349