Winows程序分为源程序和资源两部分。源程序经由C/C++编译器生成.obj文件;资源部分经由RC编译器,读取RC文件的描述后,将所有资源文件集中制作出一个.res文件.res文件与.obj文件结合在一起,集成为一个完整的.exe可以执行文件,该文件才是一个完整的Windows应用程序.其开发与执行流程如图:
win32程序开发与执行流程图
应用源程序编译链接,生成可执行文件之后,会在项目文件夹下生成一个Debug/Release文件夹,在该文件夹下面可以找到.obj文件、.exe文件等。.def文件指示连接程序如何产生最终的可执行文件.
Win32 基本原理
1. Windows 程序是Message-based,Event-Driven的;
2. WinMain 是Windows 程序的进入点
3. Windows 程序的运行靠外部发生的事件来驱动。也就是说,各种“输入”由操作系统捕捉后,以消息的形式进入程序中。有硬件产生的消息放在系统队列(system queue)中,由Windows系统或者其他Windows程序产生的消息放在应用队列(application queue)中。但从应用程序员的角度看来,这两个队列是没有什么区别的。系统调用GetMessage API每次返回一个Message。每个Windows程序都有一段类似这样的代码:
while (GetMessage(&msg, NULL, NULL, NULL)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
接受并处理消息的主角是窗口,因此每个窗口都有一个函数负责处理消息,程序员必须负责设计这个所谓的「窗口函数」(window procedure,或称为window function)。如果窗口获得一个消息,这个窗口函数必须判断消息的类别,决定处理的方式。
4. 当Windows 的Shell侦测到使用者意欲执行一个Windows 程序,于是调用加载器把该程序加载,然后调用C startup code,后者再调用WinMain,开始执进程序。WinMain 的四个参数由操作系统传递进来。
5. 在最开始,Windows程序必须做一些初始化的工作,从而产生程序工作的平台:窗口。函数CreateWindow可以创建窗口,但是在调用它之前,先要设定窗口的若干属性,包括外观和行为。外观就是边框、颜色、标题、位置等;行为就是窗口接收消息后的反应。程序必须在产生窗口之前先利用API 函数RegisterClass设定属性。RegisterClass 需要一个大型数据结构WNDCLASS 做为参数,CreateWindow 则另需要11 个参数。
6. CreateWindow 只产生窗口,并不显示窗口,所以稍后我们必须再利用ShowWindow 将之显示在屏幕上。又,我们希望先传送个WM_PAINT 给窗口,以驱动窗口的绘图动作,所以调用UpdateWindow。
7.