• WM_CLOSE,WM_QUIT,WM_DESTORY


    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)最为迅速,在实践方面

  • 相关阅读:
    Filtering Approaches for Real-Time Anti-Aliasing(2011 SIGGRAPH)
    Rendering in UE4(Gnomon School UE4 大师课笔记)
    [转]Normal Map中的值, Tangent Space, 求算 Tangent 与 Binormal 与 TBN Matrix
    【第四章】语法分析
    【第三章】词法分析
    "随笔"列表
    查看Linux下库文件(a, so)中函数、变量
    [转]在Ubuntu 18.04系统上安装Systemback的方法
    [转]grep
    解决 Android 输出Logcat时报错[ read: unexpected EOF! ]
  • 原文地址:https://www.cnblogs.com/liuliu-NoGirl/p/4029483.html
Copyright © 2020-2023  润新知