1、Windows程序开发流程:
Windows 程序分为「程序代码」和「UI资源」两大部分,通过RC编译器整合为一个完整的EXE 文件。
(资料图)
所谓UI 资源是指功能菜单、对话框外貌、程序图标、光标形状等等东西。
这些UI 资源的实际内容(二进制代码)系借助各种工具产生,并以各种扩展名存在,如.ico、.bmp、.cur 等等。程序员必须在一个所谓的资源描述档(.rc)中描述它们。
RC 编译器(RC.EXE)读取RC 档的描述后将所有UI资源档集中制作出一个.RES 档,再与程序代码结合在一起,这才是一个完整的Windows可执行文件。
2、Windows程序与操作系统之间的关系
Windows 程序的进行系依靠外部发生的事件来驱动。换句话说,程序不断等待(利用一个while 回路),等待任何可能的输入,然后做判断,然后再做适当的处理。上述的「输入」是由操作系统捕捉到之后,以消息形式(一种数据结构)进入程序之中。
3、Windows窗口生命周期如下:
1.程序初始化过程中调用CreateWindow,为程序建立了一个窗口,作为程序的屏幕舞台。CreateWindow产生窗口之后会送出 wM_CREATE直接给窗口函数,后者于是可以在此时做些初始化操作(例如配置内存、打开文件、读初始数据……)。
2在程序活着的过程中,不断以 GetMessage从消息队列中抓取消息。如果这个消息是WM_oUIT,GetMessage会传回0而结束while循环,进而结束整个程序。
3.DispatchMessage通过Windows USER模块的协助与监督,把消息分派至窗口函数。消息将在该处被判别并处理。
4.程序不断进行第2步和第3步的操作。
5.当使用者按下系统菜单中的Close命令项时,系统送出WM_CLOSE。通常程序的窗口函数不拦截此消息,于是 DefWindowProc处理它。
6.DefWindowProc收到 WM_CLOSE后,调用 DestroyWindow把窗口清除。Destroy Window本身又会送出WM_DESTROY。
7.程序对WM_DESTROY的标准反应是调用PostQuitMessage。
8.PostQuitMessage没什么其它操作,就只送出 WM_QUIT 消息,准备让消息循环中的GetMessage取得,如步骤2,结束消息循环。
3.Windows窗体原理
Windows的三大核心系统:负责窗口对象产生和消息分发的USER模块,负责图像显示绘制的GDI模块,负责内存、进程、IO管理的KERNEL模块。
试想象一下如何在一个像素阵列上产生窗口对象,其实就是使用GDI绘制窗口,不停的以一定的频率刷新显示在屏幕上,这就是图形界面,如果由在DOS或Windows DOS模拟器下编写图形界面的经验这个比较好理解。所以说其实USER模块中的窗口产生是依靠GDI模块的(包括菜单、滚动条等都是使用GDI来绘制的)。
那么,下面我们就从USER模块和GDI模块来说说Windows 的窗体原理。
如果接触过Win32 SDK编程的知道一个标准Windows窗体的产生过程:
设计窗口类、注册窗口类、创建窗口、显示窗口、启动消息循环泵循环获取消息分发到窗体过程函数处理。贴上一个标准Windows窗体的产生代码:
#include