CWnd与HWND的区别与联系(相互转换)完全解析

2024-04-20 11:38

本文主要是介绍CWnd与HWND的区别与联系(相互转换)完全解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

区别

           首先,从这两个单词的第一个字母即可知道两者之间的差别。熟悉MFC的人都知道在MFC中,类基本上都是以C开头的,这是一种规则约定,目的就是让人一看就知道它是一个类!

          因此,CWnd第一个字母C指的是class的意思,即CWnd是一个类;HWND第一个字母H指的是handle的意思,即HWND是一个句柄


CWnd:是MFC类库中所有窗口类的基类。MFC将所有窗口的通用操作都封装到CWnd类中,如MoveWindow、ShowWindow;同时,它也封装了窗口句柄,即m_hWnd成员。

HWND:即Windows窗口句柄,是Windows系统中对所有窗口的一种唯一标识

聪明的读者可以发现,CWnd其实就是MFC中的一个类名;而HWND是Windows中窗体句柄的类型,一个类似于指针地址的数字型对象。


联系(相互转换)


1、由HWND得到CWnd:

 方法一:通过CWnd的Attach()函数来获取

	CWnd wnd;HWND hWnd;wnd.Attach(hWnd);
            CWnd的Attach()函数的作用基本上就是包一个句柄附加到一个MFC的对象上,即将CWnd对象的HWND成员指向这个窗口句柄hWnd。


方法二:HWND可以通过CWnd的静态函数:CWnd::FromHandle()或CWnd::FromHandlePermanent(),由句柄实例化一个CWnd对象出来。

如果用FromHandle(),返回值是一个临时CWnd对象,并且我们确保返回值为非空,也就是hWnd是有效的。(函数声明如下:)

static CWnd*   CWnd::FromHandle(HWND   hWnd) ;


如果用FromHandlePermanent(),返回值是一个 永久对象,只有在返回的CWnd在类表里已经存在,则返回值为非空。(函数声明如下:)

static CWnd*   CWnd::FromHandlePermanent(HWND   hWnd)  ;

2、由CWnd获取HWnd:

       

         方法一:从CWnd获取HWnd就容易多了,因为它的一个成员变量m_hWnd就是所对应窗口的句柄。

            wnd->m_hWnd

        方法二:也可以通过成员函数CWnd::GetSafeHwnd()来获得该窗口对象的HWND窗口句柄。





这篇关于CWnd与HWND的区别与联系(相互转换)完全解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/920161

相关文章

线上Java OOM问题定位与解决方案超详细解析

《线上JavaOOM问题定位与解决方案超详细解析》OOM是JVM抛出的错误,表示内存分配失败,:本文主要介绍线上JavaOOM问题定位与解决方案的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一、OOM问题核心认知1.1 OOM定义与技术定位1.2 OOM常见类型及技术特征二、OOM问题定位工具

Vue和React受控组件的区别小结

《Vue和React受控组件的区别小结》本文主要介绍了Vue和React受控组件的区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录背景React 的实现vue3 的实现写法一:直接修改事件参数写法二:通过ref引用 DOMVu

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

Python实现精确小数计算的完全指南

《Python实现精确小数计算的完全指南》在金融计算、科学实验和工程领域,浮点数精度问题一直是开发者面临的重大挑战,本文将深入解析Python精确小数计算技术体系,感兴趣的小伙伴可以了解一下... 目录引言:小数精度问题的核心挑战一、浮点数精度问题分析1.1 浮点数精度陷阱1.2 浮点数误差来源二、基础解决

深度解析Python中递归下降解析器的原理与实现

《深度解析Python中递归下降解析器的原理与实现》在编译器设计、配置文件处理和数据转换领域,递归下降解析器是最常用且最直观的解析技术,本文将详细介绍递归下降解析器的原理与实现,感兴趣的小伙伴可以跟随... 目录引言:解析器的核心价值一、递归下降解析器基础1.1 核心概念解析1.2 基本架构二、简单算术表达

从入门到精通详解Python虚拟环境完全指南

《从入门到精通详解Python虚拟环境完全指南》Python虚拟环境是一个独立的Python运行环境,它允许你为不同的项目创建隔离的Python环境,下面小编就来和大家详细介绍一下吧... 目录什么是python虚拟环境一、使用venv创建和管理虚拟环境1.1 创建虚拟环境1.2 激活虚拟环境1.3 验证虚

深度解析Java @Serial 注解及常见错误案例

《深度解析Java@Serial注解及常见错误案例》Java14引入@Serial注解,用于编译时校验序列化成员,替代传统方式解决运行时错误,适用于Serializable类的方法/字段,需注意签... 目录Java @Serial 注解深度解析1. 注解本质2. 核心作用(1) 主要用途(2) 适用位置3

Python中Json和其他类型相互转换的实现示例

《Python中Json和其他类型相互转换的实现示例》本文介绍了在Python中使用json模块实现json数据与dict、object之间的高效转换,包括loads(),load(),dumps()... 项目中经常会用到json格式转为object对象、dict字典格式等。在此做个记录,方便后续用到该方

Java MCP 的鉴权深度解析

《JavaMCP的鉴权深度解析》文章介绍JavaMCP鉴权的实现方式,指出客户端可通过queryString、header或env传递鉴权信息,服务器端支持工具单独鉴权、过滤器集中鉴权及启动时鉴权... 目录一、MCP Client 侧(负责传递,比较简单)(1)常见的 mcpServers json 配置