• 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);
        }   
    }
  • 相关阅读:
    【bzoj4240】有趣的家庭菜园
    「洛谷 P1801」黑匣子
    「SDOI 2009」Elaxia的路线
    NOIP 2016【蚯蚓】
    NOIP 2014【斗地主】
    尺取法
    POJ 3169 Layout
    51nod【1196】字符串的数量
    51nod1671【货物运输】
    hihocoder1075【开锁魔法】
  • 原文地址:https://www.cnblogs.com/lxt287994374/p/3125320.html
Copyright © 2020-2023  润新知