• windows创建窗口、关闭窗口流程


    NC,即 non-client 区域,包括标题栏、窗口边框、最大、最小按钮、滚动条等。

    一、在调用Windows的::CreateWindowEx函数创建窗口时,一般会先发出 WM_NCCREATE消息,然后发出 WM_CREATE消息。

    当窗口准备关闭,此时先发出WM_DESTROY消息,再发出WM_NCDESTROY消息。

    顺序如下:

    WM_NCCREATE
    WM_CREATE
    。。。。
    WM_DESTROY
    WM_NCDESTROY


    如果在关闭时,这个窗口存在子窗口,那么会先发送子窗口的WM_DESTROY和WM_NCDESTROY消息,接着发送父窗口的WM_DESTROY和WM_NCDESTROY消息。
    顺序:
    WM_DESTROY    //CHILD,子窗口消息
    WM_NCDESTROY  //CHILD,子窗口消息
    WM_DESTROY    //Parent,父窗口消息    
    WM_NCDESTROY  //Parent,父窗口消息

    二、WM_CLOSE、WM_DESTROY、WM_QUIT区别

    WM_CLOSE:关闭应用程序窗口

    WM_DESTROY:关闭应用程序

    WM_QUIT:关闭消息循环

    只有关闭了消息循环,应用程序的进程才真正退出(在任务管理器里消失)。

    win32应用程序的完整退出过程:1、点击窗口右上角的关闭按钮,发送WM_CLOSE消息。

    2、此消息处理中调用DestroyWindow函数,发送WM_DESTROY消息。

    3、此消息处理中调用PostQuitMessage(0)函数,发送WM_QUIT消息到消息队列中。

    4、GetMessage捕获到WM_QUIT,返回0,退出循环(应用程序真正退出)。

    注意:按照上述正常流程,WM_QUIT是不会到达窗口过程的。(因为在GetMessage截获了WM_QUIT消息之后,程序已经彻底退出了!)

  • 相关阅读:
    Centos 设置默认路由得优先级
    openstack-NUMA排错记录
    openstack -新建project
    As3 常用日期工具
    As3 计算两个日期之间的天数差
    解决Asp.net Mvc返回JsonResult中DateTime类型数据格式的问题
    网盘+SVN
    SQL 并发-转
    工作目录
    Cookie
  • 原文地址:https://www.cnblogs.com/pjl1119/p/7965822.html
Copyright © 2020-2023  润新知