Windows零基础入门:4.5 获取窗口类所属的应用程序实例句柄
手机阅读 | 转发赚积分
手机收藏 | 分享给好友
手机收藏 | 分享给好友
在前面的章节中,我们WNDCLASS结构体,它其中一个成员就是hInstance。它是一个实例句柄。我想,我们有必要再继续了解下。
应用程序实例是由一个exe运行后产生的一个进程。而这个exe可以被运行很多次,也就产生了很多的进程。这里将这个exe视为单进程的程序,简化描述。而exe文件始终就只有一份,但是却产生了很多个进程。这里要排除程序限制exe一次只能运行一个进程的情况。而不管是哪样,这样创建出来的进程,就是一个应用程序的实例。每一次双击exe其实就是创建了一个应用程序的一个实例。那么这个实例就是用hInstance参数来唯一标识的。系统可以通过这个唯一的标识准确无误的停止一个实例的运行,而不会误伤其他实例。
我们的窗口类是一个程序的界面,这个界面就是窗口。而这个窗口需要创建,就需要注册窗口类。有的窗口类是已经注册好的系统窗口类,有的是需要自己注册的。而每一个窗口类都是有与之关联的实例句柄的。这样就可以确定这个窗口类是在哪个实例注册的,也就是属于谁。
而实例反应到内存层面,其实就是一段内存空间。那么窗口类属于不同的空间,也就在不同的空间中。在内存中,不同进程是相互隔离的,因此这个就是作用范围的问题。在一个进程注册的应用程序局部窗口类,就只能在这个进程内部的范围看见。
有时候我们需要通过窗口的窗口类来确定这个进程的实例句柄,就可以个、通过窗口类关联的实例句柄来得到。得到实例句柄是有很多好处的,比如可以使用实例中的资源等。进程在内存中都视为模块,包括dll也是其中一个模块类型,因为他们都是以一个整体放在内存的一个区域的,这一段内存是连续的。这也是模块的叫法的依据之一。下面是一个简单的示意图,简单示意一下进程、dll都是以整块连续内存存储的,不必深究。
HMODULE hModule = (HMODULE)GetClassLong(hwnd,GCL_HMODULE);
HICON hIcon = LoadIcon((HINSTANCE)hModule,lpIconName);
...
Win32课程菜单
-
- 第1节 指定入口点函数
- 第2节 VS创建Win32项目
- 第3节 exe程序文件
- 第4节 WinMain函数
- 第5节 实例句柄和命令行
- 第6节 第一个程序
- 第7节 Win32窗口机制和消息机制
- 第7节+ 消息机制补充说明(消息队列)
- 第8节 什么是窗口类
- 第9节 窗口类、进程和窗口过程
- 第10节 三种窗口类
- 第11节 修改窗口类
- 第12节 修改系统窗口类(子类化)
- 第13节 修改窗口类的机制和论证
- 第14节 窗口类使用
- 第15节 窗口类使用之窗口类结构体
- 第16节 窗口类结构体之窗口类风格
- 第17节 窗口类结构体之去除窗口类风格
- 第18节 窗口类结构体之水平重绘和垂直重绘
- 第19节 窗口类结构体之CS_DBLCLKS
- 第20节 窗口类结构体之CS_OWNDC
- 第21节 窗口类结构体之CS_CLASSDC
- 第22节 窗口类结构体之CS_PARENTDC
- 第23节 窗口类结构体之CS_NOCLOSE
- 第24节 窗口类结构体之CS_SAVEBITS
- 第25节 窗口类结构体之CS_BYTEALIGNCLIENT
- 第26节 窗口阴影效果CS_DROPSHADOW解密