1.1 API与SDK
API:application programming interface,应用程序编程接口,如在windows系统编程时,windows系统提供了很多API函数接口供开发者直接使用,在windows.h头文件进行了声明
MSDN:windows开发说明工具,介绍windows系统API的使用
SDK:software development kit,软件开发包,包括开发工具、开发文档说明、开发环境、API函数、辅助工具等。
1.2 窗口与句柄
窗口:屏幕上显示的一块矩形区域,是应用程序与用户进行交互的接口,可以通过窗口进行信息的输入和输出。
窗口包括客户区和非客户区,客户区主要包括应用程序直接操作和控制的区域,用来显示文字或绘制图形等,非客户区由操作系统来管理,包括标题栏、菜单栏、系统菜单、最小化和最大化框、可调边框等。
窗口包括子窗口和父窗口,对话框、消息框、按钮、单选框、复选框、组框、编辑框等都是窗口的类型。windows系统启动完成后看到的桌面也是一个窗口,这个窗口由windows系统自动创建和管理。
句柄:windows系统中有各种各样的资源,系统创建资源后会分配内存并返回相应资源的标识号,即句柄。句柄是在windows系统中识别资源的标识,有图标句柄、光标句柄、画刷句柄、窗口句柄等。
1.3 消息与消息队列
消息:windows系统中,用户程序可以调用系统API接口,系统也可以通过消息的方式来调用应用程序,基于事件驱动的方式。
在windows系统中,操作首先由操作系统感知,然后将操作打包成一个消息交由应用程序处理。操作系统调用窗口过程(处理消息的函数)将消息投放到应用程序的消息队列。
消息队列:windows应用程序开始后,系统会自动创建一个消息队列用来存放该程序创建的窗口的消息,对应用程序操作时,会产生消息推送到应用程序的消息队列中处理。
typedef struct tagMSG{
HWND hwnd; //窗口句柄标识
UINT message; //消息标识
WPARAM wParam; //附加消息1
LPARAM lParam; //附加消息2
DWORD time; //消息被传递时候的时间
POINT pt; //消息被传递时光标在屏幕上的位置
} MSG;
对各个字段的说明:
1) HWND hwnd:消息所属的窗口,窗口句柄
2) UINT message:消息标识,即消息类型,也就是以 WM 开头的消息(WM 是 Window Message 的缩写 ),例如 WM_CREATE、WM_PAINT、WM_DESTROY、WM_COMMAND、WM_KEYDOWN、WM_LBUTTONDWON 等。
3) wParam 和 lParam 是要重点说明的,它们都表示附加消息。例如,当收到一个字符消息的时,message 的值为 WM_CHAR,但用户到底输入的是什么字符,那么就由 wParam 和 lParam 来说明。wParam、lParam 表示的信息随消息类型的不同而不同,具体细节可以到MSDN中查看。
WPARAM 和 LPARAM 这两种数据类型的定义分别为:
typedef UINT_PTR WPARAM;
typedef LONG_PTR LPARAM;
在现代操作系统中(32位和64位操作系统),它们一般都表示 32 位的整数。但在16位操作系统中,WPARAM 表示16位整数,而 LPARAM 表示32位整数,根据匈牙利命名法,16 位的变量通常以W开头,32 位变量通常以L开头。升级到32位操作系统后,WPARAM也被扩展到32位,此时 WPARAM 和 LPARAM 的大小完全相同。 在 Win32 API 的早期,由于还有很多 Win16 API 的软件,为了保证和 Win16 API 的代码可移植性,微软依然保留了 WPARAM 和 LPARAM 两个宏。
1.4 WinMain函数
    Windows应用程序的入口函数、主函数。WinMain函数结束时,Windows应用程序结束。
int WINAPI WinMain(
HINSTANCE hInstance, 当前运行实例的句柄
HINSTANCE hPrevInstance, 前一个运行实例的句柄,win32环境下总是NULL
LPSTR lpCmdLine, 传递给应用程序的命令行参数
int nShowCmd 窗口显示状态
)
1.5 窗口的创建
-
设计一个窗口类
-
注册窗口类
-
创建窗口
-
显示及更新窗口
----窗口类的设计-WNDCLASS结构体
typedef struct _WNDCLASS
{
UINT style; // 窗口类型,
WNDPROC lpfnWndProc;<