搜索
首页运维windows运维Win32 SDK基础(六)之详解窗口类的查找过程和相关API

一、窗口类的查找过程

    上一文中,我们介绍了windows系统三种窗口类——系统窗口类、全局窗口类和局部窗口类。每种窗口类在操作系统中的作用域不同,而且每个作用域内注册的窗口类名称是不能重复的。而创建窗口时往往会在系统、全局、局部范围按照窗口类名称进行寻找,寻找过程总结如下:

(1)操作系统根据传入的窗口类名称,现在局部窗口类中进行查找,如果找到执行第2步,如果未找到执行第3步。

(2)比较局部窗口类和创建窗口时传入的HINSTANCE变量。如果发现相等,说明创建和注册的窗口在同一个模块,创建窗口返回。如果不相等,继续执行第3步。

(3)在应用程序全局窗口类中进行查找,如果找到,执行第4步,如果未找到执行第5步。

(4)使用找到的窗口类的信息,创建窗口并返回。

(5)在系统窗口类中查找,如果找到就创建窗口,未找到就是创建窗口失败。

二、注册窗口类的API RegisterClass和RegisterClassEx

     RegisterClass和RegisterClassEx都能用于注册窗口类,他们两个的原型分别如下:

ATOM WINAPI RegisterClass(
  _In_ const WNDCLASS *lpWndClass
);
ATOM WINAPI RegisterClassEx(
  _In_ const WNDCLASSEX *lpwcx
);

     API原型上看可以看出,二者的区别主要在于接收的参数上,这个参数就是我们需要注册的窗口类。这两个窗口类声明如下:

typedef struct tagWNDCLASS {
  UINT      style;
  WNDPROC   lpfnWndProc;
  int       cbClsExtra;
  int       cbWndExtra;
  HINSTANCE hInstance;
  HICON     hIcon;
  HCURSOR   hCursor;
  HBRUSH    hbrBackground;
  LPCTSTR   lpszMenuName;
  LPCTSTR   lpszClassName;
} WNDCLASS, *PWNDCLASS;
typedef struct tagWNDCLASSEX {
  UINT      cbSize;
  UINT      style;
  WNDPROC   lpfnWndProc;
  int       cbClsExtra;
  int       cbWndExtra;
  HINSTANCE hInstance;
  HICON     hIcon;
  HCURSOR   hCursor;
  HBRUSH    hbrBackground;
  LPCTSTR   lpszMenuName;
  LPCTSTR   lpszClassName;
  HICON     hIconSm;
} WNDCLASSEX, *PWNDCLASSEX;

    从上面的代码可以看到,两个窗口类结构体的主要区别在于WNDCLASSEX含有cbSize窗口的结构体大小和hIconSm窗口的小图标句柄。其他参数的含义请自行参考MSDN

三、获取已注册的窗口信息GetClassInfo

GetClassInfo()  API可以获取已经注册的窗口的信息,其函数原型如下:

BOOL WINAPI GetClassInfo(
  _In_opt_ HINSTANCE  hInstance,
  _In_     LPCTSTR    lpClassName,
  _Out_    LPWNDCLASS lpWndClass
);

hInstance—— 是设置查找的作用域,如果设为NULL,会从系统、全局和局部三个作用域查找。

lpClassName —— 是要查找的窗口类名称。

lpWndClass —— 传入的WndClass结构体变量的地址,用于接收窗口类信息。

     我们来查找上文创建的Button类的窗口信息:

WNDCLASS wc;
if (GetClassInfo(NULL, "Button", &wc) == false)
MessageBox(NULL,"GetClassInfo Faile",NULL,NULL);

      我们来通过设置断点,查看获取的Button窗口类的信息:

四、卸载窗口类UnregisterClass

    我们可以通过UnregisterClass可以将已经注册的窗口类进行卸载,其原型如下:

BOOL WINAPI UnregisterClass(
  _In_     LPCTSTR   lpClassName,
  _In_opt_ HINSTANCE hInstance
);

lpClassName —— 是要卸载的窗口类名称。

hInstance —— 是设置查找的作用域,如果设为NULL,会从系统、全局和局部三个作用域查找。

    以下代码,将注册的Button窗口类进行卸载:

 if (UnregisterClass("Button",NULL) == false)
MessageBox(NULL, "UnregisterClass Faile", NULL, NULL);

以上是Win32 SDK基础(六)之详解窗口类的查找过程和相关API的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
Windows 11 22H2 将云母/亚克力设计带入更多 Win32 桌面应用程序Windows 11 22H2 将云母/亚克力设计带入更多 Win32 桌面应用程序Apr 14, 2023 pm 04:58 PM

Windows 11 的原生应用(如文件资源管理器)和其他 shell 应用默认使用圆角和 Fluent Design 元素(如 Acrylic)。除了圆角,Windows 11 的另一个重要设计特点是云母等材质,它将应用程序的背景颜色与桌面对齐。云母与亚克力类似,但其工作方式略有不同。正如微软所描述的,Windows Mica 材料通过将背景与应用程序对齐来创建“颜色层次结构

Trojan/win32.casdet Rfn in Windows 11Trojan/win32.casdet Rfn in Windows 11Apr 14, 2023 pm 02:49 PM

防病毒软件有时可能会在 Windows 32 笔记本电脑上显示一条警告,指出 Trojan/win11.casdet rfn。它表示PC感染了特洛伊木马恶意软件,导致其出现故障。幸运的是,有一些可能的方法可以解决此问题,如下所述。此外,您可能对我们关于 cdn.districtm.io 是否为弹出窗口/病毒/恶意软件的详细指南感兴趣。什么是 Trojan/win32.casdet rfn?Trojan/win32.casdet rfn 是一种严重的木马病毒感染,可以超越系统并杀死其进程,使其容易

win32和win64有什么区别win32和win64有什么区别May 29, 2023 pm 05:22 PM

win32和win64的区别是:1、win32是指Microsoft Windows操作系统的32位环境,win64是指Microsoft Windows操作系统的64位版本,比32位版本更加稳定快速;2、win32最高支持2G的内存,win64必须是4G以上内存;3、win64支持基于64位的处理器,而win32却不能完全支持;4、win32追求简洁,win64追求性能。

微软开始测试 Windows 11 的 OneNote 新设计微软开始测试 Windows 11 的 OneNote 新设计Apr 19, 2023 pm 08:01 PM

早在2021年8月,微软就承诺Windows10和Windows11上的OneNote将在未来几个月内收到一系列主要功能更新,这是这家科技巨头将多个版本的笔记应用程序统一为一个单一版本的努力的一部分客户。OneNote在过去几年中发生了许多变化。2018年,当微软真正希望人们使用其UWP版本的OneNote时,该公司停止将原始且功能丰富的OneNote版本与预装的Office应用程序捆绑在一起。相反,微软只提供了UWP客户端并为现代版本添加了新功能。微软后来改

Windows 11 上的 Microsoft Store 有哪些新功能?Windows 11 上的 Microsoft Store 有哪些新功能?Apr 28, 2023 pm 06:13 PM

Microsoft正在将大量新功能放入MicrosoftStore。随着公司继续努力使应用商店更适合使用Windows的每个人,这些都将使最终用户和开发人员受益。这些更改的最大亮点之一将是Windows11上MicrosoftStore中的新“恢复应用程序”功能。它将连接到用户的Microsoft帐户,因此登录到新的Windows11PC后,他们只需单击几下即可自动恢复应用程序。“为了让客户更容易快速、无缝地过渡到他们的新PC,我们将很快在WindowsInsider频道

Win32图形设计软件Canva 推出免费AI工具,挑战巨头 AdobeWin32图形设计软件Canva 推出免费AI工具,挑战巨头 AdobeMar 05, 2024 pm 04:34 PM

近日新消息,Canva推出了一系列AI图像工具功能试图与Adobe的Firefly抗衡,其旨在简化工作场所的内容创建流程,让非设计专业人士更容易、更高效地创作内容,让平面设计师能够专注于关键任务,并挑战Adobe在市场上的主导地位。据介绍,Canva的VisualWorksuite已经整合了全新的BrandHub,旨在为用户提供一套工具,帮助他们确保与其组织的视觉标识保持一致。用户可以利用这一工具创建包含公司文化信息(例如LOGO、字体、颜色和统一设计风格)的BrandKit(品牌IP工具包)。

Microsoft 发布针对 Windows Defender 中的 Behavior:Win32/Hive.ZY 错误的修复程序Microsoft 发布针对 Windows Defender 中的 Behavior:Win32/Hive.ZY 错误的修复程序Apr 28, 2023 pm 04:01 PM

一位微软官员证实了有关谷歌Chrome、ChromiumEdge、Discord和其他几个应用程序被微软内置防病毒软件“WindowsDefender”标记为“ Behavior:Win32/Hive.ZY”的广泛报道。这家科技巨头在一份声明中证实,它正在研究一个修复程序,该修复程序将在接下来的几个小时内向所有人推出。那么“Behavior:Win32/Hive.ZY”到底是什么?根据微软安全门户上发布的一份文件,任何标记为“Behavior:Win32/Hive.ZY”的文件都是带有

如何修复 Windows Defender 行为:Win32/Hive.ZY 警报如何修复 Windows Defender 行为:Win32/Hive.ZY 警报May 06, 2023 am 08:04 AM

许多Windows11和10用户看到来自WindowsDefender的警告通知表示检测到威胁“行为:Win32/Hive.ZY”而感到困扰。据报道,当用户尝试打开一些常用应用程序(如GoogleChrome或ChromiumEdge、Whatsapp、Discord和Spotify)时,会引发此WindowsDefender警告或警报。即使您在PC上阻止了此威胁,它也会在您下次打开此受影响的应用程序时弹出并显示一条消息MicrosoftDefenderAntivi

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前By尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
1 个月前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器