VC++中有关句柄和指针及其转换

1.MFC窗口的句柄和指针的转换
      (1) 一般窗口对象都会有一个其对应的句柄变量,所以我们可以取此对象的m_hWnd属性来得到句柄。
      (2)使用GetSafeHwnd函数取得程序所在窗口类的句柄
      (3)使用FromHandle函数来通过句柄得到其想要的指针
      其他的一些方法:
      GetActiveWindow 取当前活动窗口句柄
      AfxGetMainWnd   取主窗口句柄
      GetForegroundWindow 取前台窗口句柄
      FindWindow寻找参数指定的窗口
      EnumWindow枚举窗口

2. 上下文无关设备的句柄和指针的转换
      (1)this->m_hDC
      (2)CDC::GetSafeHdc
      (3)可以使用FromHandle函数来通过句柄得到其想要的指针

3.Gdi对象的句柄和指针的转换
        (1)this->m_hObject
        (2)CGdiObject::GetSafeHandle
        (3)可以使用FromHandle函数来通过句柄得到其想要的指针

4.窗口、控件的指针和句柄的相互转化

(1)指针转化为句柄

在MFC应用程序中首先要获得窗口的指针,然后将其转化为句柄

CWnd* pWnd;

HANDLE hWnd = pWnd->GetSafeHwnd();

(2)句柄转化为指针

在MFC应用程序中首先获得对话框控件的句柄,然后获得其指针

HANDLE hWnd;

GetDlgItem(IDC_xxx,&hWnd);

CWnd * pWnd = FromHandle(hWnd);

获得程序窗口指针的办法

(1)获得主框架窗口指针(任何时候都可以用,只要是MFC程序中)

CWnd* pWnd = AfxGetMainWnd();

(2)获得对话框中控件指针

CWnd* pWnd = GetDlgItem(IDC_xxx);

(3)获得对话框中某控件的句柄

HANDLE GetDlgItem(m_hDLG,m_nID_DlgItem);

(4)获得GDI对象的句柄

HANDLE m_hGDIObj = m_pGDIObj->GetSafeHanle();

版权声明:本文为博主原创文章,未经博主允许不得转载。

假如父窗口类名称为CFatherDlg,那么在子窗口中可以调用GetParent获取父窗口对象指针,如
CFatherDlg* pFather = (CFatherDlg*)GetParent();
这样就能够用pFather调用所有父类的公开方法和类成员变量了
这个代码只针对对话框应用,文档应用没用过

其实这个最好的方法还是传指针
GetParent()  ;  获取到父指针后再进行一下强制转换

在这里,你要明白指针都是32位的,只是因为C++是强类型的语言,所以不转换编译不通过
因此进行强制转换可以骗过编译器
虽然转换了,但是因为不管什么指针都是32位,所以并没有损失数据

比如在CMyView中获取CFrameWnd的指针可以这样
CFrameWnd *pFrameWnd = ((CFrameWnd *)GetParent());

http://www.cctry.com/thread-2635-1-1.html

在父类中定义了一个变量 com,子类模式对话框,里面有一个tab控件,tab控件上的一页上有个button,我想单机button,调用父类的com。使用GetParent(),有问题,没有获取到com的状态,获取的代码如下:
CSetZeroDlg *parent = (CSetZeroDlg *)GetParent();
CCalibrationDlg *pparent = (CCalibrationDlg *)parent->GetParent();
请问怎么解决?
获取一个类的变量,在该类被实例化后,只要获取该类的对象或对象指针后通过对象或对象指针即可访问,这是一般的方法,根本就不用管他是父类还是子类。你想访问父类中定义了一个变量 com变量,那么只要获取父类对象即可。GetParent函数是获取该窗口的父窗口对象的窗口类指针,而不是获取父类对象窗口指针。不要把类的父子关系与窗口的父子关系混淆了。

MFC编程中常常遇到子窗口向父窗口传递参数的情况,这就需要获得父窗口的指针。

例:主对话框CMyMainDlg通过按钮ButtonA进入对话框CMyParentDlg,CMyParentDlg在通过按钮ButtonB进入对话框CMyChildDlg。现在需要在CMyChildDlg分别访问CMyParentDlg和CMyMainDlg的内容,需要在CMyChildDlg中加入以下两条语句:

CMyMainDlg    *pMMD = (CMyMainDlg*)AfxGetMainWnd();     //获取主窗口指针
        CMyParentDlg *pMPD = (CMyParentDlg*)this->GetParent();   //获取父窗口指针

其中,this代表当前窗口指针,指向CMyChildDlg;pMMD和pMPD便是指向主窗口和父窗口的指针。

MFC获得主窗口和父窗口指针相关推荐

  1. MFC获得主窗体和父窗体指针

    MFC编程中经常遇到子窗体向父窗体传递參数的情况,这就须要获得父窗体的指针. 例:主对话框CMyMainDlg通过buttonButtonA进入对话框CMyParentDlg.CMyParentDlg ...

  2. MFC子窗口和父窗口(SetParent,SetOwner)

    一.概念和区别 在windows系统中,每个窗口对象都对应有一个数据结构,形成一个list链表.系统的窗口管理器通过这个list来获取窗口信息和管理每个窗口.这个数据结构中有四个数据用来构建list, ...

  3. 关闭子窗口刷新父窗口

    以下这段代码是为了弹出一个窗口,window.showModalDialog这个是弹出窗体的地方,当执行到的时候它后面的代码就不执行了,当把弹出的窗体关闭将会执行后面的location.reload( ...

  4. javascript:子窗口和父窗口交互

    最近项目开发中需要子窗口和父窗口交互的内容,基本上无非就是把子窗口的信息传递给父窗口,并且关闭自己等等,或者是父窗口把自己的信息传递给子窗口等等. 1.父窗口传递信息给子窗口 看代码实例: <s ...

  5. [轉]子窗口和父窗口的函数或对象能否相互访问

    子窗口和父窗口的函数或对象能否相互访问 解决思路:        每一个窗口其实也是一个对象,窗口内的对象或函数就相当于对象内的对象或方法,问题的关键是如何取得窗口对象的控制句柄,不同的窗口的控件句柄 ...

  6. Electron中打开和关闭子窗口以及子窗口向父窗口传值

    场景 用HTML和CSS和JS构建跨平台桌面应用程序的开源库Electron的介绍以及搭建HelloWorld: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/a ...

  7. qt如何把父窗口的变量传给子窗口_父窗口和iframe子窗口之间相互传递参数和调用函数或方法...

    1.父窗口向子窗口传递参数: 可以在url中添加参数:2.html?a=1&b=2&c=3 然后在子页面上可用js解析,提供一个函数: function getQueryStr(sAr ...

  8. QT开发_弹出窗口禁用父窗口并移动到父窗口中心位置

    在开发中我们可能会增加一些动画效果,如弹出子窗口时父窗口不可操作 我们可以在弹出子窗口的构造函数里添加如下代码: setWindowModality(Qt::ApplicationModal); 这条 ...

  9. window.open返回值实例详解(子窗口向父窗口回显)

    window.open返回值实例详解(子窗口向父窗口回显) window.open实例: 1.父页面: <script language="javascript" type= ...

最新文章

  1. 几个 Python 语法糖的实现
  2. Webdriver使用Chrome模拟手机浏览器测试移动版网站
  3. 深度学习(16)TensorFlow高阶操作五: 张量限幅
  4. 删除还原点 oracle,oracle 还原点(restore point)
  5. Atitit 发送post http 功能总结目录1. 常见三种模式 Form-data Form-urlencode Raw 12. Php code 12.1. urlencode
  6. python socket清空接受区_用 Python 开发一个 「聊天室」
  7. iOS逆向工程整理 HOOK微信抢红包
  8. 毕业设计之---基于java web的停车管理系统
  9. JNi调用过程(转载)
  10. weui表单添加功能_万能表单小程序 weui V8.1.16 weiqing功能模块 支持PC端管理 + 微信端管理 目前最强大的表单系统 weiqing微赞通用功能模块...
  11. 在windows11上安装cuda,cudnn,以及GPU版的pytorch
  12. 【Week15作业 B】ZJM与生日礼物【字典树】
  13. 数学软件GeoGebra安装
  14. 【linux驱动之字符设备驱动基础】
  15. 驱动轮是什么意思_驾驶机动车经常听说驱动轮那你知道是什么意思吗
  16. 版署:近期将清理所有未经审查进口游戏
  17. 高德地图、百度地图、腾讯地图坐标相互转换
  18. 区块链激励层——区块链生态建设的驱动力量
  19. appbarlayout-spring-behavior
  20. Linux size命令和C程序的存储空间布局

热门文章

  1. 链接h5代码_H5域名被微信拦截的原因及解决方案?
  2. 抛物线交点式公式_2020“九校联考”中点公式解决平四存在性问题
  3. kafka 启动_「首席看Event Hub」如何在您的Spring启动应用程序中使用Kafka
  4. python实现计算器代码 博客园_python实现计算器
  5. e站host地址_Linux系统怎么使用命令行查询公网IP地址
  6. Leetcode 674.最长递增序列
  7. 结对编程小项目实现 Python+PyQt5+OOP
  8. centos安装java的jdk
  9. Maven(九)Eclipse创建Web项目(简单方式)
  10. LintCode-第k大元素