
1. Windows程序开发流程概述:
Windows程序主要由“程序代码”和“UI资源”两大块构成,通过RC编译器整合为一个完整的EXE文件。UI资源包括功能菜单、对话框设计、程序图标、光标形状等。这些资源的实际内容(二进制代码)由各种工具生成,以不同的扩展名存在,如.ico、.bmp、.cur等。程序员需在资源描述档(.rc)中描述它们。RC编译器读取RC档的描述后,将所有UI资源档集中制作出一个.RES档,再与程序代码结合,形成一个完整的Windows可执行文件。
2. Windows程序与操作系统的交互关系:
Windows程序的运行依赖于外部发生的事件来驱动。换句话说,程序不断等待(利用一个while循环),等待任何可能的输入,然后进行判断,再做出适当的处理。上述的“输入”由操作系统捕捉,以消息形式(一种数据结构)进入程序。
3. Windows窗口生命周期:
在程序初始化过程中,通过调用CreateWindow建立窗口,作为程序的屏幕舞台。CreateWindow产生窗口后,会送出WM_CREATE消息给窗口函数,进行初始化操作(如配置内存、打开文件、读取初始数据等)。在程序运行过程中,不断通过GetMessage从消息队列中抓取消息。如果收到WM_QUIT消息,GetMessage会传回0,结束while循环,从而结束整个程序。消息的由DispatchMessage完成,在Windows USER模块的协助与监督下,将消息至窗口函数。当使用者按下系统菜单中的Close命令项时,系统送出WM_CLOSE消息,通常由DefWindowProc处理它,然后调用DestroyWindow清除窗口。这一系列操作最终导致程序结束。
4. Windows窗体原理及动态创建控件:
Windows的三大核心系统包括USER模块、GDI模块和KERNEL模块。其中,USER模块负责窗口对象的产生和消息分发,GDI模块负责图像显示绘制,而KERNEL模块则负责内存、进程、IO管理。
标准Windows窗体的产生过程包括设计窗口类、注册窗口类、创建窗口、显示窗口和启动消息循环泵循环获取消息分发到窗体过程函数处理。在接触Win32 SDK编程时,这一流程更为显著。
值得注意的是,所有Windows的窗体及控件归根结底都是通过CreateWindow或CreateWindowEx函数来创建的。对话框及其子控件的管理依靠Windows内建的对话框管理器。通常,对话框管理器会根据我们在资源设计器中设计的对话框及子控件生成的.rc文件来自动创建对话框和子控件。我们也可以通过动态创建控件的方式,直接将参数传递给CreateWindow函数来创建对话框和控件。通过设置控件的自绘制属性(如BS_OWNDRAW),我们可以开放控件的WM_DRAWITEM消息给父窗口,由父窗口负责绘制按钮样式,这就是控件重绘的原理。通过替换内建的窗体函数,将消息传递到自定义的窗体过程函数进行处理,实现控件的子类化。
