Win32知识之窗口本质 一丶摘要
在学习Win32的时候. 很多操作都是窗口进行操作的.那么今天就说一下窗口的本质是什么.
窗口的本质是不断绘制.是windows通过消息机制进行绘制的.
我们知道.内存分为高低2G 低2G是给应用程序使用的. 高2G是给操作系统使用的.而我们画图形的操作都是操作系统通过底层的 win32k.sys这个驱动来提供的.
进程跟线程管理是通过notokerner.exe这个程序来管理的.但是三环不能使用.所以提供接口给三环. 分别是kerner32.dll 跟user32.dll gdi.dll
那么他们之间的区别是什么.
1.kerner32.dll 管理进程线程跟内存的一个dll
2.user32.dll 窗口管理.图形界面管理.
3.gdi.dll 自己绘制的的管理.
而我们要认识一下窗口的创建.那么需要了解几个基础的只是.
1.设备对象.
2.DC设备上下文.
3.图形对象.
1.设备对象是什么.简而言之设备对象的意思就是你要画图形要往哪里画. 每一个窗口都有一个窗口句柄.而且是存放在全局窗口句柄表中的. 我们可以获取一下.使用Spy++获取.
2.DC设备上下文.DC设备上下文其实就是这个窗口有一块内存是绘制用的. 我们想要往这个窗口绘制.需要先绘制到这个内存中才可以.这块内存就称为DC上下文.
3.图形对象.图形对象就是指画笔 画刷 位图. 等等这些对象.因为我们要往内存中画的时候.可以画默认的.但是一般我们想改变一下形式.所以创建图形对象跟DC相关联.那么我们绘制就可以使用图形对象了.
二丶绘制窗口步骤绘制窗口免不了使用API.但是使用之前.需要知道我们要操作的步骤.
1.获取窗口句柄.也就是设备对象.
2.获取窗口中的DC上下文.可以理解为获取指定窗口的绘图的那块内存.
3.创建图形对象. 要想绘制.那么首先就需要你自定义的一个绘制的东西才可以.
4.关联图形对象跟DC. 只要关联了.那么绘制的时候自动就使用你的图形对象了.
5.进行你的绘图操作. 这里就是你写的绘图代码了.
6.释放资源. 不管是窗口句柄也好. DC也好.图形对象也好.都是内核对象.所以我们需要进行释放.
具体API:
1.获取指定窗口句柄. FindWindowA/FindWindowW
HWND FindWindowA( LPCSTR lpClassName, 窗口类名.字符串. 可以用Spy++获取 LPCSTR lpWindowName 窗口名称 ); 返回窗口句柄.