在A对话框中,如何获得B对话框中CTabCtrl当前显示的子窗口,并且实现设置该子窗口的显示与隐藏

解决方案 »

  1.   

    事实上我是点击A窗口的CListCtrl中的某行,让CTabCtrl控件的值从配置文件中读取数据,我是在OnShowWindow将子窗口的值进行更新,点击CListCtrl,当前的子窗口不会马上调用OnShowWindow函数,只有重新切换才会相应,如何让CListCtrl点击后CTabCtrl的当前显示的子窗口马上响应OnShowWindow呢???
      

  2.   

    不必放OnShowWindow中单独写个函数。
      

  3.   

    我刚刚试了,我在点击CListCtrl中添加了刚刚写的那个函数,但是会报错,不知道为什么
      

  4.   

    void CMenuPage::SetWindowValue()
    {
    int temp;
    CString s_vertical,s_horizontal,s_video_unite,s_interlace,s_spatial_temporal,s_degree,s_leftdown,s_rightdown,s_leftup,s_rightup,s_title,s_startTime,s_endTime,s_light,s_constrast,s_saturate,s_checkTitle;
    GetPrivateProfileString(MENUPAGEINFO,_T("degree"),_T(""),s_degree.GetBuffer(MAX_PATH),MAX_PATH,cConfig.configPath);
    //设置翻转初始值
    SetDlgItemText(IDC_COMBO_DREEGE,s_degree);
    //::SetDlgItemText(AfxGetMainWnd()->m_hWnd,IDC_COMBO_DREEGE,s_degree);//送到指定控件
    GetPrivateProfileString(MENUPAGEINFO,_T("SliderLight"),_T(""),s_light.GetBuffer(MAX_PATH),MAX_PATH,cConfig.configPath);
    //设置亮度滑块初始值
    SetDlgItemText(IDC_EDIT_LIGHT,s_light);
    //::SetDlgItemText(AfxGetMainWnd()->m_hWnd,IDC_EDIT_LIGHT,s_light);
    temp=cConfig.CStringIntoInt(s_light);
    m_LightSliderCtrl.SetPos(temp);//设置滑块为当前

    //设置对比度滑块初始值
    GetPrivateProfileString(MENUPAGEINFO,_T("Constrast"),_T(""),s_constrast.GetBuffer(MAX_PATH),MAX_PATH,cConfig.configPath);
    SetDlgItemText(IDC_EDIT_CONTRAST,s_constrast);
    //::SetDlgItemText(AfxGetMainWnd()->m_hWnd,IDC_EDIT_CONTRAST,s_constrast);
    temp=cConfig.CStringIntoInt(s_constrast);
    m_ContrastSliderCtrl.SetPos(temp);//设置滑块为当前 //设置饱和度滑块初始值
    GetPrivateProfileString(MENUPAGEINFO,_T("Saturation"),_T(""),s_saturate.GetBuffer(MAX_PATH),MAX_PATH,cConfig.configPath);
    SetDlgItemText(IDC_EDIT_SATURATION,s_saturate);
    //::SetDlgItemText(AfxGetMainWnd()->m_hWnd,IDC_EDIT_SATURATION,s_saturate);
    temp=cConfig.CStringIntoInt(s_saturate);
    m_SaturationSliderCtrl.SetPos(temp);//设置滑块为当前 GetPrivateProfileString(MENUPAGEINFO,_T("HorizontalImage"),_T(""),s_horizontal.GetBuffer(MAX_PATH),MAX_PATH,cConfig.configPath);
    GetPrivateProfileString(MENUPAGEINFO,_T("VerticalImage"),_T(""),s_vertical.GetBuffer(MAX_PATH),MAX_PATH,cConfig.configPath);
    GetPrivateProfileString(MENUPAGEINFO,_T("Video_unite"),_T(""),s_video_unite.GetBuffer(MAX_PATH),MAX_PATH,cConfig.configPath);
    GetPrivateProfileString(MENUPAGEINFO,_T("Interlace"),_T(""),s_interlace.GetBuffer(MAX_PATH),MAX_PATH,cConfig.configPath);
    GetPrivateProfileString(MENUPAGEINFO,_T("Spatial_temporal"),_T(""),s_spatial_temporal.GetBuffer(MAX_PATH),MAX_PATH,cConfig.configPath);
    GetPrivateProfileString(MENUPAGEINFO,_T("leftdown"),_T(""),s_leftdown.GetBuffer(MAX_PATH),MAX_PATH,cConfig.configPath);
    GetPrivateProfileString(MENUPAGEINFO,_T("leftup"),_T(""),s_leftup.GetBuffer(MAX_PATH),MAX_PATH,cConfig.configPath);
    GetPrivateProfileString(MENUPAGEINFO,_T("rightdown"),_T(""),s_rightdown.GetBuffer(MAX_PATH),MAX_PATH,cConfig.configPath);
    GetPrivateProfileString(MENUPAGEINFO,_T("rightup"),_T(""),s_rightup.GetBuffer(MAX_PATH),MAX_PATH,cConfig.configPath); GetPrivateProfileString(MENUPAGEINFO,_T("endtime"),_T(""),s_endTime.GetBuffer(MAX_PATH),MAX_PATH,cConfig.configPath);
    GetPrivateProfileString(MENUPAGEINFO,_T("startime"),_T(""),s_startTime.GetBuffer(MAX_PATH),MAX_PATH,cConfig.configPath);
    GetPrivateProfileString(MENUPAGEINFO,_T("CheckTitle"),_T(""),s_checkTitle.GetBuffer(MAX_PATH),MAX_PATH,cConfig.configPath);
    GetPrivateProfileString(MENUPAGEINFO,_T("title"),_T(""),s_title.GetBuffer(MAX_PATH),MAX_PATH,cConfig.configPath); if(s_checkTitle=="1")
    {
    m_checkTitle.SetCheck(1);
    }else
    {
    m_checkTitle.SetCheck(0);
    } if(s_horizontal=="1")
    {
    m_hotizontal.SetCheck(1);
    }else
    {
    m_hotizontal.SetCheck(0);
    } if(s_vertical=="1")
    {
    m_vertical.SetCheck(1);
    }else
    {
    m_vertical.SetCheck(0);
    } if(s_video_unite=="1")
    {
    m_videoUnite.SetCheck(1);
    }else
    {
    m_videoUnite.SetCheck(0);
    } if(s_interlace=="1")
    {
    m_interlace.SetCheck(1);
    }else
    {
    m_interlace.SetCheck(0);
    } if(s_spatial_temporal=="1")
    {
    m_spatial_temporal.SetCheck(1);
    }else
    {
    m_spatial_temporal.SetCheck(0);
    }
    SetDlgItemText(IDC_COMBO_LEFTDOWN,s_leftdown);
    SetDlgItemText(IDC_COMBO_RIGHTDOWN,s_rightdown);
    SetDlgItemText(IDC_COMBO_LEFTUP,s_leftup);
    SetDlgItemText(IDC_COMBO_RIGHTUP,s_rightup);
    SetDlgItemText(IDC_COMBO_TITLE,s_title);
    SetDlgItemText(IDC_EDIT_STARTTIME,s_startTime);
    SetDlgItemText(IDC_EDIT_ENDTIME,s_endTime);
    //UpdateData(true);
    }
      

  5.   

    http://my.csdn.net/my/album/detail/1174896好像是SetDlgItemText()
    还有SetCheck()都有问题,上面的路径是我截图的报错原因
      

  6.   

    在void CMenuPage::SetWindowValue()
    中设置断点逐行(F10)看那行
      

  7.   

    我设置了就是我刚刚说的那里报错,SetDlgItemText、SetPos、SetCheck我把SetDlgItemText改成::SetDlgItemText(AfxGetMainWnd()->m_hWnd,IDC_EDIT_CONTRAST,s_constrast);他就不报错会往下走,当时值没在子窗口上,然后注释SetPos,SetCheck又有错
      

  8.   

    调用void CMenuPage::SetWindowValue()
    要有CMenuPage实例如:
    CMenuPage m_MenuPage

    CMenuPage m_pMenuPage
    查查调用时实例是不是对。
      

  9.   


    void CCustomPreset::OnNMClickListrpreset(NMHDR *pNMHDR, LRESULT *pResult)//点击右边CListCtrl添加事件
    {
    //LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<NMITEMACTIVATE>(pNMHDR);
    int =m_rList.GetSelectionMark();
    CString str;
    str=m_rList.GetItemText(,1);
    if(str=="3")
    {
    CConfig::configPath=_T("../config1.ini");
    cmp.SetWindowValue();
    //cmp.OnShowWindow(true,SW_PARENTOPENING);
    }else
    {
    CConfig::configPath=_T("../config.ini");
    }
    this->EndDialog(1);
    *pResult = 0;
    }cmp是在CCustomPreset头文件中声明的CMenuPage cmp;
      

  10.   

    “cmp是在CCustomPreset头文件中声明的CMenuPage cmp;”光CMenuPage cmp没用,要:
    Create
    或者
    DoModle
    即cmp.Creat 或 cmp。domodle
    MFC 产生实例分步:
    1。
    声明:CMenuPage cmp;
    或:  CMenuPage *cmp=new CMenuPage;
    2。Create 或 对话框 Domodle
    这样才有窗口。
      

  11.   

    我的目的是只要改变另一个CTabCtrl的子窗口的值,不是真的要窗口弹出来
      

  12.   

    那就要在对话框中定义另一套变量,这套变量与窗口中的变量无关
    窗口中的变量将是这套变量的copy。
    这种设计不好,窗口弹出来后再赋值不好吗。
    看不见的东西赋值有什么用。
      

  13.   

    在对话框中定义另一套变量,这个我那些变量是CTabCtrl子窗口的控件变量名。
    难道我要再对话框中获取CTabCtrl子窗口的每一个控件然后设置变量???CTabCtrl控件的子窗口弹出来再赋值是什么效果呢?我给他重新赋值,是因为,每个配置文件的内容不同,我把当前CTabCtrl读取的配置文件改变了,那么CTabCtrl上面的值也要做相应的改变啊如果有什么其他办法可行,我也想试试!!!
      

  14.   

    在对话框中定义另一套变量,这个我那些变量是CTabCtrl子窗口的控件变量名。
    例如控件CEdit 关联 control 叫 m_Edit。
    那么定义:
    CString m_EditValue;
    这时再
    CMenuPage cmp;
    可以
    cmp.m_EditValue="EditValue";
    窗口init时可以:
    m_Edit.SetWindowText(m_EditValue);
    总之控件值只有有窗口时才能操作。
      

  15.   

    我在CMenuPage中给CEdit控件定义了Control变量,还是没用,那我该怎么做呢?
      

  16.   

    cmp.m_EditValue="EditValue";
    窗口init时可以:
    m_Edit.SetWindowText(m_EditValue);
    窗口不打开只能设置m_EditValue。
    窗口init时才把设置值送控件。
    就是说窗口不打开控件是不能用的
      

  17.   

    CMenuPage在CTabctrl上是显示的啊
      

  18.   

    那就是CMenuPage HWND不对,只要有了一个窗口的HWND,什么都可以做。
    你在CMenuPage init的地方放一个全局变量:
    CMenuPage *g_pMenuPage=0;
    OnDialogInit时:
    g_pMenuPage=this;
      

  19.   

    按你说的,我还是在原来UpdateMenuValue()函数中,更改值,值改变了但是,没有更新到界面,难道不能更新吗?我用了UpdateData(false)和UpdateData(true)更新啊
      

  20.   

    UpdateData只用于值关联的(如CString)控件,对关联为control的无效。