发布消息(Posting a Message)
你可以利用PostMessage函数把一个消息发布到一个消息队列。PostMessage函数把一个消息放到一个线程消息队列的末端,然后会立即返回,而不用等待线程处理完这个消息。这个函数的参数包括一个窗口句柄,一个消息标识符,和两个消息参数。系统会把这些参数复制到一个MSG结构中,填充结构的time和pt成员变量,并把这个结构发到消息队列中。
系统利用窗口句柄传递给PostMessage函数来决定哪个线程消息队列应该接收这个消息。如果句柄是HWND_TOPMOST,系统会把消息发布到所有高级别窗口的线程消息队列中。
你可以用PostThreadMessage函数把消息发布到一个指定线程消息队列。PostThreadMessage类似于PostMessage函数,除了这个函数的第一个参数是一个线程标识符而不是窗口句柄。你可以通过调用GetCurrentThreadIdea函数来获取线程标识符。
利用PostQuitMessage函数可以退出消息循环。PostQuitMessage函数发布一个WM_QUIT消息到当前执行线程。当这个线程遇到WM_QUIT消息时,这个线程会消息循环结束并把控制返回给系统。一个应用程序通常调用PostQuitMessage函数来响应WM_DESTROY消息,就像下面的例子显示的:
case WM_DESTROY:
// Perform cleanup tasks.
PostQuitMessage(0);
break;
你可以利用PostMessage函数把一个消息发布到一个消息队列。PostMessage函数把一个消息放到一个线程消息队列的末端,然后会立即返回,而不用等待线程处理完这个消息。这个函数的参数包括一个窗口句柄,一个消息标识符,和两个消息参数。系统会把这些参数复制到一个MSG结构中,填充结构的time和pt成员变量,并把这个结构发到消息队列中。
系统利用窗口句柄传递给PostMessage函数来决定哪个线程消息队列应该接收这个消息。如果句柄是HWND_TOPMOST,系统会把消息发布到所有高级别窗口的线程消息队列中。
你可以用PostThreadMessage函数把消息发布到一个指定线程消息队列。PostThreadMessage类似于PostMessage函数,除了这个函数的第一个参数是一个线程标识符而不是窗口句柄。你可以通过调用GetCurrentThreadIdea函数来获取线程标识符。
利用PostQuitMessage函数可以退出消息循环。PostQuitMessage函数发布一个WM_QUIT消息到当前执行线程。当这个线程遇到WM_QUIT消息时,这个线程会消息循环结束并把控制返回给系统。一个应用程序通常调用PostQuitMessage函数来响应WM_DESTROY消息,就像下面的例子显示的:
case WM_DESTROY:
// Perform cleanup tasks.
PostQuitMessage(0);
break;