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);
    }   
}

 

posted @ 2013-06-07 21:57  紫清婷  阅读(2178)  评论(0编辑  收藏  举报