第一章Windows程序内部运行机制
基础知识:
一个Windows应用程序至少要有一个窗口,称为主窗口。
一个应用程序窗口通常都包含标题栏、菜单栏、系统菜单、最小化框、最大化框、可调边框,有的还带有滚动条。下图为WS_OVERLAPPEDWINDOW类型的窗口:
窗口可以分为客户区和非客户区,应用程序通常在客户区中显示文字或绘制图形。标题栏、菜单栏、系统菜单、最小化框和最大化框、可调边框统称为窗口的非客户区,它们由Windows系统管理,应用程序则主要管理客户区的外观及操作。
对话框和消息框也是一种窗口。在Windows程序中,窗口是通过窗口句柄来标识的。
Windows程序设计是一种事件驱动方式的程序设计模式,主要是基于消息的。
在Windows程序中,消息是由MSG结构体来表示的。MSG结构体的定义为:
typedef struct tagMSG{
HWND hwnd; //窗口句柄
UINT message; //消息标识符
WPARAM wParam;
LPARAM lParam;
DWORD time;
POINT pt;
} MSG;
该结构体成员变量的含义为:第一个成员变量hwnd表示消息所属的窗口,一个消息一般都是与某个窗口相关联的。在Windows程序中,用HWND类型的变量来标识窗口。
第二个成员变量message指定了消息的标识符。在Windows中,消息是由一个数值来表示的,不的消息对应不同的数值。
第三、第四个变量成员wParam和lParam,用于指定消息的附加信息。最后两个变量分别表示消息投递到消息队列中的时间和鼠标的当前位置。
每一个Windows应用程序开始执行后,系统都会为该程序创建一个消息队列,这个消息队列用来存放该程序创建的窗口的消息。例如,当我们按下鼠标左键的时候,将会产生一个WM_LBUTTONDOWN消息,系统会将这个消息放到窗口所属的应用程序的消息队列中,等待应用程序的处理。Windows将产生的消息依次放到消息队列中,而应用程序则通过一个消息循环不断地从消息队列中取出消息,并进行相应。这种消息机制,就是Windows程序运行的机制。
Windows程序中的消息可以分为“进队消息”和“不进队消息”。进队的消息将由系统放入到应用程序的消息队列中,然后由应用程序取出并发送。不进队的消息在系统调用窗口过程时直接发送给窗口。
总结:
Windows程序运行的机制:当外接设备对应用程序进行有关的操作时,发出相关的消息,系统将该消息放到这个应用程序的消息队列中,应用程序通过一个消息循环不断地从消息队列中取出消息,并进行响应。