注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

hhfighting的博客

以责人之心责己,以恕己之心恕人

 
 
 

日志

 
 
 
 

被调用窗口和调用窗口间的数据关联  

2010-10-31 09:06:28|  分类: 专业知识 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
 问题:CDialog1(调用窗口)中变量  int num,在CDialog2(被调用窗口)中想使用此变量。
方法一、通过变量传递。
              在CDialog2中也定义变量 int num。
             然后在调用时,进行变量传递,即:
            CDialog2 dlg;
            dlg.num=num;
            dlg.DoModal();
方法二、通过构造函数进行传递。
             将CDialog2的构造函数改为
            CDialog2(int num,CWnd*pParent=NULL
   {
this->num=num;
   }
方法三:基于父子窗口关系。
CDialog2::AnyFunction(...)
       { 
           CDialog1*   pParent   =   DYNAMIC_DOWNCAST(CDialog1,GetParent()); 
           if(pParent){ 
              ... 
              pParent->num 
           } 
        } 
   其中,DYNAMIC_DOWNCAST在运行时检测父窗口的对象定义(RTTI机制),并返回有效的父窗口指针,随后即可直接进行调用。注意,当父    窗口不是正确的期望窗口时,也就是说,并非一个真正的CParentDialog实例时,返回pParent值为NULL。 
   DYNAMIC_DOWNCAST在调试和运行版本均得到同样的结果(效果),所以这里使用它来检查父窗口的数据类型。
  方法三在测试的过程中出现错误,未能正确的得到父窗口指针,我觉得原因应该出在GetParent()上。
GetParent()是得到父窗口句柄,前提应该是CDialog2应该是CDialog1的子窗口,而我的程序里CDialog2是popup窗口,只有调用 和被调用关系。
  评论这张
 
阅读(233)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018