如何在对话框类中访问父窗口中的数据
来源:互联网 发布:java对象实例化 编辑:程序博客网 时间:2024/05/18 15:27
对话框是VC++ 编程中一种经常用到的资源,同时它也是一种非常便捷地与用户沟通信息的方式。对话框基本上可以分为两大类:模态对话框和非模态对话框。如何从对话框中访问其父窗口中的数据将是我们下面要讨论的问题。
一。父窗口类为 CMainFrame , CChildFrame 和 CDialog 类:
当父窗口为主边框窗口类,子边框窗口类和对话框类时,我们可以在调用对话框类的构造函数时(也就是生成对话框对象时)为其指定父窗口;然后,在对话框类的 OnShowWindow() 函数中利用 函数 CWnd * GetParent ( ) const 得到父窗口的指针,利用该指针我们就可以访问父窗口中的数据。
下面举一个例子,对所述问题进行详细讲解。
第一步:生成一个 SDI 应用程序。
单击“File”中的“New”菜单项,选中“Project”标签中的“MFCAppWizard(EXE)”并在右边的“Project Name”中键入“Practice”按“确定”键,选中“Single Document ”,然后点击“完成”。
第二步:填加对话框资源,生成对话框类。
打开资源编辑器,为系统增加一新的对话框(ID :IDD_MYDLG),在该对话框中填加一 CEdit Box 控件(ID :IDC_EDIT);双击该对话框为该对话框生成一对话框类(CMydlg), 并在“ClassWizard”中为 CEdit Box 控件填加一 CString 型变量:m_str。
第三步: 生成并显示非模态对话框。
在 CMainFrame 类中添加下面两个成员变量:
CMydlg * pDlg ;
CString str("This is a Practice.") ;
在菜单中加入一 “DispDlg”菜单项(IDM_DISPDLG),并在 CMainFrame 类中为其加上响应函数OnDispDlg(),函数内容如下:
void CMainFrame :: OnDispDlg()
{
if(pDlg = = NULL)
{
pDlg = new CMydlg( this ) ;
// this 为 指向 CMainFrame 对象的指针
pDlg->Create(IDD_MYDLG) ;
}
pDlg->ShowWindow(SW_SHOW) ;
}
第四步:在对话框类中, 重载消息 WM_SHOWWINDOW 的响应函数 CMydlg :: OnShowWindow(BOOL bShow, UINT nStatus) ,并通过 GetParent ( ) 函数得到父窗口的指针,然后使用该指针访问父窗口中的数据。
void CMydlg :: OnShowWindow(BOOL bShow, UINT nStatus)
{
CDialog :: OnShowWindow(bShow, nStatus);
CMainFrame *pParent=(CMainFrame *)GetParent(); //加入语句
m_str = pParent->str; //加入语句
UpdateData(FALSE); //加入语句
return ;
}
编译运行后,点击菜单“OnDsipDlg”,弹出对话框,其中的CEdit Box 中将显示字符串“This is a Practice.”。
二。父窗口为视图类:
如果对话框的父窗口为视图类(CView 及其派生类),则情况稍有不同。需要在生成对话框以后用 void CWnd :: SetOwner( CWnd* pOwnerWnd ) 函数 为其指定父窗口类 , 并在该对话框中用 CWnd * GetOwner ( ) const 来得到父窗口类的指针.
仍接上例,按以下进行操作:
第五步:为视类(CpracticeView)添加一 CString 型变量 str ;删除主边框窗口中的OnDispDlg()函数,并在视类中重新为菜单项 DispDlg(IDM_DISPDLG)
加入响应函数 OnDispDlg( ),内容如下:
void CPracticeView :: OnDispDlg( )
{
CMydlg dlg;
dlg.SetOwner( this ) ;
dlg. DoModal();
}
第六步:将CMydlg :: OnShowWindow( ) 函数改为以下形式:
void CMydlg :: OnShowWindow(BOOL bShow, UINT nStatus)
{
CDialog :: OnShowWindow ( bShow, nStatus );
//修改语句
CPracticeView * pParent = (CPracitceView * ) GetOwner ( ); m_str = pParent ->str ;
UpdateData ( FALSE ) ;
return ;
}
编译运行后,点击菜单“OnDsipDlg”,将出现与上例相同的结果。
以上只是举了一个 CString 型变量赋值的例子,当然,我们本可以在 OnDispDlg ( ) 函数中通过 pDlg-$#@62;m_str=str 语句实现赋值,但是对于较复杂的情况:比如,在对话框中含有一个CListCtrl 控件,而该控件的初始化在OnDispDlg ( ) 中利用pDlg指针是无法间接完成的,只能在 CMydlg 的成员函数中完成,采用上面的方法就可以顺利解决此类问题。
- 如何在对话框类中访问父窗口中的数据
- 如何在对话框类中访问父窗口中的数据
- 如何在对话框类中访问父窗口中的数据
- 如何在一个对话框中调用另一个对话框中的数据
- 在PowerScript脚本中访问数据窗口中的数据
- 在PowerScript脚本中访问数据窗口中的数据
- 图形的绘制,如何使用自定义画笔(颜色,线宽,线形)。如何为程序中添加选项菜单和选项设置对话框,如何使用标准颜色对话框,如何使用字体对话框,在选项对话框中实现预览功能。实现选项对话框和窗口类中的数据交换。如何改变对话框和控件的背景色,如何改变控件的文本颜色,
- android 如何在对话框中获取edittext中的数据
- android 如何在自定义对话框中获取edittext中的数据
- 如何在子对话框中调用父对话框中的函数
- 实现在基于对话框的应用程序中打开一个对话框时隐藏主窗口,使用ado访问数据库存
- BB10 Cascades: 如何在QML中访问C++中的数据。
- 在父窗口中访问iframe中的元素
- 使用jQuery在iframe中访问父窗口中的节点
- 线程中如何更新对话框中的数据
- 如何在对话框类中调用视图类中的函数
- 如何在mfc中通过线程向主窗口发送数据或者是访问控件
- 如何在数据窗口中显示图片
- 昨天去论坛求助个ASP系统源码结果被侮辱了
- 一步一步用帝国CMS(二)
- 在SSIS中使用XML任务处理XML数据或文档
- SNS理论在C2C中应用
- mount:nfs
- 如何在对话框类中访问父窗口中的数据
- web 询问对话框
- ABAP--如何将REUSE_ALV_GRID_DISPLAY的题头自适应居中显示
- 网站快速登录提交搜索引擎
- 55个RSS网站提交入口
- 英文产品网站的搜索引擎推广
- 又遇www.9348.cn劫持IE浏览器
- Java OS及arch值表
- 正则基础之——小数点