WM_CLOSE、WM_DESTROY、WM_QUIT的区别(询问,销毁窗口,退出进程,都不是一回事)

一、发送消息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

相关文章
相关标签/搜索