基本的win32程序框架
消息长什么样?
typedef struct tagMSG {
HWND hwnd;//其窗口过程接收消息的窗口的句柄。 当消息是线程消息时,此成员为 NULL 。
UINT message;//消息的标识符。 应用程序只能使用低字;高字由系统保留。
WPARAM wParam;//关于消息的附加信息。 确切含义取决于 消息 成员的值。
LPARAM lParam;//关于消息的附加信息。 确切含义取决于 消息 成员的值。
DWORD time;//消息的发布时间。
POINT pt;//发布消息时的光标位置(以屏幕坐标表示)。
DWORD lPrivate;//无说明
} MSG, *PMSG, *NPMSG, *LPMSG;
MAKEINTRESOURCEW
链接
将整数值转换为与资源管理功能兼容的资源类型。
UNREFERENCED_PARAMETER
UNREFERENCED_PARAMETER(hPrevInstance);//这个hPrevInstance参数我使用过了,别报警告了,仅此而已。
编译过程
预处理(*.i)
宏定义展开(例如#define 定义);
处理所有的条件编译指令,例如#ifdef、#ifndef、#endif等;
处理#include,将#include引用的文件插入该行;
删除所有注释;
添加行号和文件标识,这样在调试和编译出错的时候可以确定是哪个文件的哪一行。
预处理的过程并不会检查语法错误。
汇编(*.s)
汇编的过程会检查语法错误。
编译(*.obj)
编译过程就是将汇编文件生成目标文件的过程,在这个过程中会做一些优化处理。
链接(*.exe)
*.c用到了C标准库的printf函数,但是编译过程只是把源文件转换成二进制文件而已,这个二进制文件还不能直接执行,还需要把转换以后的二进制文件与要用到的库绑定链接到一起(实际上还会绑定其他对象,并做一些其他工作,在此不再深究)。