switch (message)
{
case WM_CREATE:
case WM_SIZE:
case WM_VSCROLL:
}
windows从队列里面取出消息
然后经过翻译然后windows调用函数过程的时候
message是只是一个值WM_CREATE
还是
message也是一个队列先赋值message为WM_CREATE
然后再赋值WM_SIZE
再然后赋值WM_VSCROLL??
请高手指教
{
case WM_CREATE:
case WM_SIZE:
case WM_VSCROLL:
}
windows从队列里面取出消息
然后经过翻译然后windows调用函数过程的时候
message是只是一个值WM_CREATE
还是
message也是一个队列先赋值message为WM_CREATE
然后再赋值WM_SIZE
再然后赋值WM_VSCROLL??
请高手指教
你写出的这几个只是一些常用的,还有很多
简单地讲,你可以这样理解:消息队列是一个数据结构,隶属于线程,而“消息”就是一个结构体对象(参照 MSG 结构体)。
放置消息时,就是产生一个“消息”结构体放到“消息队列”这个数据结构之中;线程中有一个消息泵,它不断检查“消息队列”这个数据结构,如果发现其中有“消息”就把它取出来(最常见的形式就是 GetMessage 返回),然后交给目标去处理(绝大多数情况下消息由对应的窗口过程来处理)。WM_CREATE 消息是不经过消息队列的,不过你可以暂时忽略这种差异。窗口创建时要有一个窗口函数,窗口函数通常就是你的那种“switch”结构。窗口一但创建,就会有一个 WM_CREATE 消息,对你而言就是窗口函数被调用,“switch (message) ” 中 message 的值就等于 WM_CREATE(本质是一个定义数值的宏),所以你就可以这里作一些创建窗口对应的动作。然后随着窗口的活动,会有不同的消息被窗口函数处理,对你而言就是 “switch (message) ” 中 message 的值不同。
WM_CREATE、WM_SIZE 等都是宏,就是定义了一个数值,目的是不用记忆那些预定义的值,你也可以就把它们换成对应的值。
typedef struct {
HWND hwnd;
UINT message;
WPARAM wParam;
LPARAM lParam;
DWORD time;
POINT pt;
} MSG, *PMSG;
你做的每一件事件。例如你按下键盘的一个键。它会产生扫描码。然后键盘驱动程序把它翻译成消息(填上面的消息结构)然后放到系统消息队列。最后再由操作系统分到每个应用程序的消息队列中。再就是应用程序自己的消息循环等待获得消息进行处理。
再就是调用DISPATCHMESSAGE把消息分派到窗口过程处理。所以MESSAGE应该是在产生消息时就已经写好了的
消息的有结构的如下
typedef struct {
HWND hwnd;
UINT message;
WPARAM wParam;
LPARAM lParam;
DWORD time;
POINT pt;
} MSG, *PMSG; WM_CREATE 等只是一个数值,#define 出来的。根据数值的不同来确定执行哪个行为。而这个值可以看成一个ID标识,是在postmessage或sendmessage时填进去的。比如: Postmessage(WM_QUIT, NULL, NULL);
队列是有的,和线程绑定的。