一、发送消息SendMessage、PostMessage编程
PostMessage将消息放入消息队列后立刻返回,而SendMessage直到窗口过程处理完消息后才返回windows
二、三个消息的区别函数
WM_CLOSE:post
在系统菜单里选择了“关闭”或者点击了窗口右上角的“X”按钮,你的窗口过程就会收到WM_CLOSE。DefWindowProc对 WM_CLOSE的处理是调用DestroyWindow。固然,你能够不让DefWindowProc处理,而是本身处理,例如询问用户是否保存更改等。若是用户选择“取消”,你忽略此消息,那么程序照常运行;若是用户确认要退出,你就调用DestroyWindow。ui
WM_DESTROY:.net
接下来,DestroyWindow完成窗口的清理工做,最后像窗口过程发送WM_DESTROY。对于 WM_DESTROY,DefWindowProc不会处理。也就是说,你若是不处理这个消息,虽然你的窗口已经销毁,但进程并不会结束。通常处理 WM_DESTROY时都是释放资源(例如申请的内存等),而后调用PostQuitMessage。线程
WM_QUIT:翻译
PostQuitMessage会发送WM_QUIT给消息队列。注意,WM_QUIT永远不会到达窗口过程,由于GetMessage获得WM_QUIT后就会返回FALSE,从而结束消息循环,最后进程结束,程序退出。设计
假设使用者执行HELLOWIN,而且使用者最终单击了 Close按钮,或者假设用键盘或鼠标从系统菜单中选择了Close, DefWindowProc处理这一键盘或者鼠标输入,在检测到使用者选择了Close选项以后,它给窗口消息处理程序发送一条WM_SYSCOMMAND消息。WndProc将这个消息传给DefWindowProc。 DefWindowProc给窗口消息处理程序发送一条WM_CLOSE消息来响应之。WndProc再次将它传给DefWindowProc。 DestroyWindow呼叫DestroyWindow来响应这条WM_CLOSE消息。DestroyWindow致使Windows给窗口消息处理程序发送一条WM_DESTROY消息。WndProc再呼叫PostQuitMessage,将一条WM_QUIT消息放入消息队列中,以此来响应此消息。这个消息致使WinMain中的消息循环终止,而后程序结束。blog
三、退出程序语句
exit(0);
postquitmessage(0);
onok();oncancel();
sendmessage(wm_close,0,0);
exitprocess(0);
其中以exit(0)最为迅速,在实践方面
Ps:
原文:SendMessage sends the specified message to a window or windows. SendMessage calls the window procedure for the specified window and does not return until the window procedure has processed the message. The PostMessage function, in contrast, posts a message to a thread's message queue and returns immediately.
译文:SendMessage将指定的消息发送到一个窗口或多个窗口。SendMessage为这个指定的消息调用窗口处理程序,直到窗口处理完这个程序后才会返回。和SendMessage函数相比,PostMessage函数发送一个消息到线程消息对列中,并当即返回。
辨析:shuishi32 在给出翻译的还给对ddlddy的问题:“我用SendMessage(hWnd,WM_QUIT,NULL,NULL)和PostMessage(hWnd,WM_QUIT,NULL,NULL)去关闭一指定窗口,SendMessage的不能实现,能够解释一下吗?我主要的就是想知道这个!”给出了解答:WM_QUIT是通知系统关闭,这个消息只有系统经过GetMessage来返回0达到线程关闭的。而SendMessage发送的消息不会到系统对列中,它只是处理,而PostMessage就会发送到系统队列中。 另外能够用SendMessage(hWnd, WM_CLOSE, 0, 0);来关闭对话框。
这是一个不少朋友曾经问过的问题,我推荐你们看win32消息机制方面的书籍,好比《Windows 程序设计》、《Windows 环境下32位汇编程序设计》(不是非要用到汇编才须要看这本书,^-^)。
http://blog.csdn.net/yiruirui0507/article/details/6062991