MFC中 通过对子对话框的操作来更新主对话框
使用Tab Control 控件时,需要建子对话框。
我想实现点击标签上的List Control控件时,主对话框上的编辑框控件能得到更新。然而List Control控件是在子对话框上。百度了好久,有人说主对话框不能处理子对话框的消息,即点击标签时无法通知主对话框。
解决办法:
在子对话框中通过GetParent()获取主对话框的指针,然后就可以调用它的成员了。
注意:一般Tab控件的父窗口是主对话框,Tab控件子对话框的父窗口是Tab控件,所以现在Tab控件子对话框中获取父窗口(即Tab控件),然后利用Tab控件获取父窗口(即主对话框)。
如下面代码:
void CPoetrySortDlg::OnDblclkPoetryList(NMHDR *pNMHDR, LRESULT *pResult) { LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR); // TODO: 在此添加控件通知处理程序代码 *pResult = 0; NMLISTVIEW *pNMListView = (NMLISTVIEW*)pNMHDR; if (-1 != pNMListView->iItem) // 如果iItem不是-1,就说明有列表项被选择 { // 获取被选择列表项第一个子项的文本 CString strPoetryName = m_poetryList.GetItemText(pNMListView->iItem, 0); CWnd *pParentDlg = static_cast<CWnd*>(this->GetParent()->GetParent()); //获取主对话框的指针 CEdit* pCtrl = static_cast<CEdit*>(pParentDlg->GetDlgItem(IDC_APOETRY_EDIT)); //获取主对话框中编辑框控件的指针 UINT ID = pCtrl->GetDlgCtrlID(); //获取主对话框上编辑框控件的ID // 将文本显示在编辑框中 pParentDlg->SetDlgItemText( ID , strPoetryName); } }