编写标准C程序经常调用的C库函数是由编译器厂商提供的。Windows平台下也有类似的函数可供调用,不同的是,这些函数是由Windows操作系统本身提供的。
Windows操作系统提供了各种各样的函数,以方便我们开发Windows应用程序,这些函数是Windows操作系统提供给应用程序编程的接口,简称为API函数。所有主要的Windows函数都在Windows.h头文件中进行了声明。
MSDN是微软向开发人员提供的一套帮助系统,其中包含大量的开发文档、技术文章和示例代码。
Win32 SDK是Windows 32位平台下的软件开发包,包括了API函数、帮助文档、微软提供的一些辅助开发工具。
窗口是Windows应用程序中的一个非常重要的元素,一个Windows应用程序至少要有一个窗口。
在消息的结构体中有相关窗口的句柄,消息类型,消息参数,时间和鼠标位置等信息。
每一个Windows应用程序开始执行后,系统都会为该程序创建一个消息队列,这个消息队列用来存放该程序创建的窗口的消息。
Windows程序中的消息可以分为“进队消息”和“不进队消息”。
在函数调用过程中,会使用栈。_stdcall与_cdecl是两种不同的函数调用约定,定义了函数参数入栈的顺序,由调用函数还是被调用函数将参数弹出栈,以及产生函数修饰名的方法。
Windows应用程序的入口是WinMain函数,由插入到可执行文件中的启动代码调用。
WinMain函数的参数指定了该程序当前运行的实例句柄,命令行参数,以及窗口应该如何显示。
设计窗体类就是指定窗口的特征,包括窗口的样式,窗口过程函数,
窗口过程函数被调用的过程如下:
1) 在设计窗口类的时候,将窗口过程函数的地址赋值给lpfnWWndProc成员变量;
2) 调用RegsiterClass(&wndclass)注册窗口类,那么系统就有了我们所编写的窗口过程函数的地址;
3) 当应用程序接收到某一窗口的消息时,调用DispatchMessage(&msg)将消息回传给系统,系统则利用先前注册窗口类时得到的函数指针,调用窗口过程函数对消息进行处理。
Win32的API函数都遵循_stdcall调用约定。
在VC++开发环境中,默认的编译选项是_cdecl。
在Windows程序中,回调函数必须遵循_stdcall调用约定。
要在窗口中输出文字或者显示图形,需要用到设备描述表DC。DC是一个包含设备信息的结构体,在Windows平台下,所有的图形操作都是利用DC来完成的。
当窗口从无到有、改变尺寸、最小化后恢复、被其他窗口遮盖后再显示时,窗口的客户区都将变为无效。当窗口客户区的一部分或者全部变为“无效”时,系统会发送WM_PAINT消息,通知应用程序重新绘制窗口。
当窗口刚创建的时候,整个客户区都是无效的。因为这个时候程序还没有在窗口上绘制任何东西,当调用UpdateWindow函数时,会发送WM_PAINT消息给窗口过程,对窗口进行刷新。