1、发送消息SendMessage、PostMessage

PostMessage将消息放入消息队列后马上返回,而SendMessage直到窗口过程处理完消息后才返回

2、三个消息的区别

WM_CLOSE:

  在系统菜单里选择了“关闭”或者点击了窗口右上角的“X”按钮,你的窗口过程就会收到WM_CLOSE。DefWindowProc对 WM_CLOSE的处理是调用DestroyWindow。当然,你可以不让DefWindowProc处理,而是自己处理,例如询问用户是否保存更改等。如果用户选择“取消”,你忽略此消息,那么程序照常运行;如果用户确认要退出,你就调用DestroyWindow。

WM_DESTROY:

  接下来,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中的消息循环终止,然后程序结束。

3、退出程序语句

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位汇编程序设计》(不是非要用到汇编才需要看这本书,^-^)。

WM_CLOSE、WM_DESTROY、WM_QUIT, SENDMESSAGE ,POSTMESSAGE相关推荐

  1. VB.net 进程通信中FindWindow、FindWindowEX、SendMessage函数的理解

    目录 一.代码背景 二.主要工具 三.函数解析 1.FindWindow: 2. FindWindowEx: 3.SendMessage: 四.具体代码示例: 1.第一部分功能: A.接收端: B.发 ...

  2. 总结OnOK()、OnCancel()、OnClose()、OnDestroy()之间的区别(转)

    目录(?)[+] cDialogonokenddialogdestroywindow区别 收藏 1摘要 2模式对话框的显示 3模式对话框的循环等待 4模式对话框的循环终止 5与OK和Cancle按钮的 ...

  3. 关于OnOK()、OnCancel()、OnClose()、OnDestroy() 模式对话框

    关于OnOK().OnCancel().OnClose().OnDestroy() 模式对话框 http://www.cnblogs.com/minvt/archive/2009/11/16/1603 ...

  4. VC编程Windows消息处理机制、阻塞试验、SetTimer、MessageBox、小心消息响应处理函数

    VC6标准WIN32程序,Windows消息处理机制: 1.在注册窗口类时,指定了消息处理函数WndProc(). 2.WinMain()里有消息循环: while (GetMessage(& ...

  5. 牛人整理分享的面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结...

    网站地址:http://www.itmian4.com 基础篇:操作系统.计算机网络.设计模式 一:操作系统 1. 进程的有哪几种状态,状态转换图,及导致转换的事件. 2. 进程与线程的区别. 3. ...

  6. GetMessage PeekMessage SendMessage PostMessage

    GetMessage () and PeekMessage () GetMessage 其唯一用途就是从事件对列中获得消息,并进行处理.当程序在等待通过 GetMessage 传递的消息时,主事件循坏 ...

  7. OnOK()、OnCancel()、OnClose()、OnDestroy()之间的区别

    第一,OnOK()和OnCancel()是CDialog基类的成员函数,而OnClose()和OnDestroy()是CWnd基类的成员函数, 即WM消息响应函数.   从应用程序结构的角度,拿对话框 ...

  8. 重载OnOK、OnCancel、OnClose

    转载:https://www.cnblogs.com/BeyondTechnology/archive/2011/02/20/1959293.html 推荐:深入浅出 重载OnOK.OnCancel. ...

  9. 【MFC】关于OnOK()、OnCancel()、OnClose()、OnDestroy() 模式对话框

    第一,OnOK()和OnCancel()是CDialog基类的成员函数,而OnClose()和OnDestroy()是CWnd基类的成员函数,即WM消息响应函数.从应用程序结构的角度,拿对话框来说,红 ...

最新文章

  1. CSipSimple 工程分析 1
  2. 独家 | 一文读懂机器学习中的贝叶斯统计学
  3. 在Mac配置adb命令
  4. 数字电路时钟问题——Jitter与Skew区别
  5. Web Essentials之样式表StyleSheets
  6. Android shape
  7. 如何在Linux下统计高速网络中的流量
  8. mysql safe无法启动_解决mysqld_safe无法启动问题的方法
  9. IDEA生成toString方法的快捷键
  10. Flask中的请求上下文和应用上下文
  11. java面试题41 下面字段声明中哪一个在interface主体内是合法的? ()
  12. scp带密码后台传输
  13. Java实训项目13:GUI学生信息管理系统 - 实现步骤 - 创建应用程序类
  14. udp linux 获取本机ip
  15. 项目Alpha冲刺(6/10)
  16. 20162304 2016-2017-2 《程序设计与数据结构》第5周学习总结
  17. 使用腾讯云服务器搭建自己网站应该怎么做
  18. 用户画像第二章(企业级360°用户画像_数据调研及ETL)
  19. UI控件DevExpress WinForm新手指南——如何在应用启动时执行操作
  20. 【云原生 · Docker】入门篇:安装、镜像加速

热门文章

  1. Jiss Wang:Whitecoin白币新生态体系中的落地应用
  2. ios 分享一个功能很全的视频播放器
  3. java题目集合第四部分(pta)
  4. Oracle安装过程中,报ORA-27102 out of memory错误
  5. adams c语言,Adams2013编译C语言用户子程序
  6. 易语言自定义窗口过程
  7. SpringBoot 整合Jest
  8. windows 下接入西克激光LMS151
  9. unity跳转场景变暗的解决办法
  10. 利用js实现多彩输入框