zoukankan      html  css  js  c++  java
  • 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);
        }   
    }
  • 相关阅读:
    以《淘宝网》为例,描绘质量属性的六个常见属性场景
    架构漫谈读后感
    软件体系架构课下作业01
    架构之美阅读笔记06
    架构之美阅读笔记05
    架构之美阅读笔记04
    架构之美阅读笔记03
    架构之美阅读笔记02
    架构之美阅读笔记01
    学习进度15
  • 原文地址:https://www.cnblogs.com/lxt287994374/p/3125320.html
Copyright © 2011-2022 走看看