为什么需要传递HINSTANCE给CreateWindow?

article/2025/10/26 11:55:44

Win32中有两个API函数,CreateWindow和RegisterClass。它们有一个HINSTANCE参数,很多人对这个参数不是很理解,今天就来讲一讲。

窗口类的名称还不足以唯一地确定这个窗口类。每一个进程都会拥有它自己的窗口类列表,而在这个列表中的每个条目都会包含一个实例句柄和一个窗口类名称。
举个例子,如果一个程序有两个 DLL,这两个 DLL 都注册了一个类名“MyClass”,并将 DLL 的句柄作为 HINSTANCE 传递,则窗口类列表可能如下所示。

>> 请前往Topomel查看图片 <<

在创建窗口的时候,每个模块在创建窗口时都会传递自己的HINSTANCE,窗口管理器使用实例句柄和类名的组合来查找窗口类,代码如下:
CreateWindow(“MyClass”, …, hinstA, …); // 使用A.DLL中的窗口类创建窗口
CreateWindow(“MyClass”, …, hinstB, …); // 使用B.DLL中的窗口类创建窗口
CreateWindow(“MyClass”, …, hinstC, …); // 没有找到窗口类,创建失败

这就是为什么多个DLL都注册一个名为“MyClass”的类是可以的,因为我们可以通过实例句柄来区分它们。

但是,上述规则有一个例外。 如果你在注册类时传递了CS_GLOBALCLASS标志,则窗口管理器在查找类时将忽略实例句柄。 所有USER32类都注册为全局类。 因此,以下所有调用都会创建 USER32 编辑控件:
CreateWindow(“edit”, …, hinstA, …);
CreateWindow(“edit”, …, hinstB, …);
CreateWindow(“edit”, …, hinstC, …);

如果要注册一个类以供其他模块在对话框中使用,则需要注册为CS_GLOBALCLASS,因为正如我们之前看到的,在创建对话框期间执行的内部 CreateWindow 调用以创建控件将对话框的 HINSTANCE 作为 HINSTANCE 参数传递。 由于对话框实例句柄通常是创建对话框的DLL(因为使用相同的 HINSTANCE 来查找模板),未能使用 CS_GLOBALCLASS 标志注册意味着,窗口类查找将找不到该类,因为它已注册在提供类的DLL的实例句柄,而不是使用它的那个。

在 16 位 Windows 中,实例句柄也做了其他事情,但它们不再与 Win32 相关。

一个常见的错误是,在注册窗口类时传递一些其他模块(通常是主可执行文件)的 HINSTANCE。 现在你应该了解了 HINSTANCE 的用途,也应该解释使用错误的HINSTANCE 注册类所带来的后果。Do you?

总结

理解一个应用程序的骨架:注册窗口类,创建窗口,显示和更新窗口,启动消息循环。
是一名Win32写手的基本要求。
它是桌面应用的基石,很难改变,我们生命中所应该追求的,就是那些很难改变的东西。

最后

Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《What is the HINSTANCE passed to CreateWindow and RegisterClass used for?》


http://chatgpt.dhexx.cn/article/kkb05GAP.shtml

相关文章

HINSTANCE数据类型

作者&#xff1a;马 岩&#xff08;Furzoom&#xff09; &#xff08;http://www.cnblogs.com/furzoom/&#xff09;版权声明&#xff1a;本文的版权归作者与博客园共同所有。转载时请在明显地方注明本文的详细链接&#xff0c;未经作者同意请不要删除此段声明&#xff0c;感谢…

【引用】HINSTANCE

在win32下与HMODULE是相同的东西&#xff0c;在Win32下还存在主要是因为win16 程序使用HINSTANCE来区别task。 区别&#xff1a; Handle 是代表系统的内核对象&#xff0c;如文件句柄&#xff0c;线程句柄&#xff0c;进程句柄。 HMODULE 是代表应用程序载入的模块&#xff0c;…

hInstance是什么参数?

熟悉C编程的人都知道main函数带有2个参数&#xff1a;arc和argv&#xff0c;完整的main函数定义是&#xff1a;int main(int argc, char *argv[])。argc指示程序启动时命令行参数的个数&#xff0c;argv则包含具体的参数字符串。 如果有程序叫“hello.exe”&#xff0c;直接启动…

hInstance是什么参数

熟悉C编程的人都知道main函数带有2个参数&#xff1a;arc和argv&#xff0c;完整的main函数定义是&#xff1a;int main(int argc, char *argv[])。argc指示程序启动时命令行参数的个数&#xff0c;argv则包含具体的参数字符串。 如果有程序叫“hello.exe”&#xff0c;直接启…

外卖小程序邀请入口获取推广路径

外卖小程序邀请入口 饿了么小程序邀请入口 1.手机应用商城搜索 淘宝联盟app,让后下载,登录建议直接选淘宝登录,让后按照下图的步揍即可. 淘宝联盟APP获取推广appid和path的地方&#xff0c;这是两个不同的每日红包。 2.另外饿了么小程序里面有个邀请有礼的&#xff0c;通过上…

万能门店小程序可diy完整前后端源码

这个是一位朋友付费分享的万能门店小程序&#xff0c;听他说功能挺强大的&#xff0c;功能也挺全面的。 有必须提醒一下&#xff1a;小程序代码分为前端和后端。 前端代码&#xff1a;例如&#xff1a;用“微信开发者工具”上传至微信官方审核就可以了。 后端代码&#xff1…

uniapp 生成微信小程序码

第一步创建一个容器&#xff0c;展示图片 <view style"margin: 49rpx auto;width: 300rpx;height: 300rpx;"><image :src"maskData" style"width: 100%;" longtap"longtap"></image> </view> 功能是&#x…

微信小程序的推广思路与方法,详细思路解析

简单来说&#xff0c;小程序就是微信上的APP&#xff0c;它内生于微信&#xff0c;坐享10亿流量&#xff0c;而且不需要下载安装即可使用的应用&#xff0c;它实现了应用“触手可及”的梦想&#xff0c;用户扫一扫或者搜一下即可打开应用。今天&#xff0c;我们就来看一看微信小…

替你发优惠券,为了推广小程序微信真是豁出去了

微信iOS 6.6.6版本上线了! 虽然App Store的新功能里,只写了“可保留未编辑完的朋友圈”。但心细如发的道爷依然发现几大重要更新,解决的痛点,必将让10亿用户为之小嗨一把,小程序也迎来了新的春天!另外,安卓版已经正式上线了! 微趋道,就是小程序 本次主要更新了以下内…

小程序介绍

1. 小程序介绍 微信小程序&#xff0c;简称小程序&#xff0c;英文名 Mini Program &#xff0c;是一种不需要下载安装即可使用的应用&#xff0c;它实现 了应用“触手可及”的梦想&#xff0c;用户扫一扫或搜一下即可打开应用 1.1 为什么是微信小程序&#xff1f; 微信有海…

小程序快速推广方法,你知道多少?

很多人觉得小程序的风口已经过去&#xff0c;其实不然&#xff01;就从这次疫情看&#xff0c;很多平时只做线下的大型餐饮店&#xff0c;都开始上线外卖平台&#xff0c;如果品牌具有一定规模的话&#xff0c;比起依托第三方的外卖平台&#xff0c;肯定是开发自己的小程序性价…

视频号推广小程序是什么;助你快速引流变现;丨国仁网络资讯

目前微信已经退出了视频号推广小程序,但对于大多数创作者来说还不知道它是干啥的。视频号推广小程序可以比喻视频号“dou+”, 它是腾讯官方专门为视频号博主打造的,以推广视频号内容为主,主要针对三个方向:基础定向投放,可以限定性别、年龄、地域的人群;投放指定账号的粉…

如何快速推广微信小程序,并通过微信小程序赚取睡后收入

微信小程序的搭建&#xff1a; 1、使用邮箱注册微信小程序帐号。 2、完善小程序主体。个人认为小程序的名称以及图标很重要。名称要言简意干&#xff0c;让用户根据名称就能知道小程序是做什么的。图标要简洁、清爽&#xff0c;并且符合主题。 3、开发小程序。自己具有开发能…

获取小程序appid和path教程详细版

打开你需要获取appid的小程序&#xff0c;这里以“饿了么”小程序为例&#xff0c;然后点击右上角的图标 以下为小程序path获取方法 登录你的小程序的微信公众平台https://mp.weixin.qq.com点击右上角的工具&#xff0c;进入后是下面的页面 然后用你输入的微信号微信浏览“饿了…

微信小程序实现展示图片(图片推广小程序可以使用)

实现效果图&#xff1a; 首先就是这个封面是一些图片展示界面&#xff0c;后台返回的都是图片。然后根据返回数据数组的下标进行分类&#xff0c;第一排只显示数组为1&#xff0c;4&#xff0c;7一次类推&#xff0c;第二列是2&#xff0c;5&#xff0c;8的index&#xff0c;第…

微信公众号如何推广自己的小程序以及操作步骤

微信公众号如何推广自己的小程序以及操作步骤 在使用微信公众号推广自己的小程序之前&#xff0c;首先要关联您的小程序。操作步骤如下&#xff1a; 微信公众号如何绑定自己的小程序的第一步&#xff0c;点微信公众号后台的左侧里有个小程序管理&#xff0c; 第二步&#xff…

如何在大学推广小程序?

如何在大学推广你的小程序&#xff1f; 最近是开学季&#xff0c;对于小程序运营者来说&#xff0c;这又是小程序推广的一个较佳时期。为什么这样说呢&#xff1f;在这之前&#xff0c;我们先来看一句话&#xff1a;利用用户关系链进行小程序的裂变传播能够最大程度曝光小程序。…

小程序推广有几种方式?小程序运营有什么步骤?

目前&#xff0c;微信小程序已经成为越来越多企业进行拓客推广的方式&#xff0c;但如何推广、如何引流成为不少企业需要思考的难题。小程序使用便捷&#xff0c;但也需要了解小程序的特性及推广方式&#xff0c;才能更好地进行运营。小程序有哪些入口&#xff1f;企业可以通过…

小程序推广方案有哪些?

小程序推广方案有哪些&#xff1f;如今&#xff0c;从事小程序推广领域的人越来越多。对于新人来说&#xff0c;有必要掌握的小程序推广方案有哪些&#xff1f;这里有四个。 1.做线下宣传策划 如果商店有预算&#xff0c;可以考虑在各种线下场景投放广告&#xff0c;购买广告…

小程序如何推广?这里有5招

如何推广这个小程序&#xff1f;我坚信有很多朋友刚刚建立了自己的小程序&#xff0c;不知道如何推广这个小程序。今天小将教你一些更常见和实用的小程序如何推广&#xff0c;你为什么不根据自己的具体情况选择应用程序哦&#xff01; 小程序如何推广&#xff1f;这里有5招 1…