zoukankan      html  css  js  c++  java
  • WPF的消息机制(三) WPF内部的5个窗口之处理激活和关闭的消息窗口以及系统资源通知窗口

    目录

    WPF的消息机制(一)-让应用程序动起来

    WPF的消息机制(二)-WPF内部的5个窗口

    (1)隐藏消息窗口

    (2)处理激活和关闭的消息窗口以及系统资源通知窗口

    (3)用于用户交互的可见窗口

    (4)用于UI窗口绘制的可见窗口

    WPF的消息机制(三)-WPF输入事件的来源

    WPF的消息机制(四)-WPF中UI的更新

    处理应用程序激活和系统关闭的窗口(Window 2#)

    创建时机:在调用Application.Run之后,运行到Application.EnsureHwndSource()方法当中。

    用途:派发Application的Activated,Deactivated,SessionEnding事件。

    WPF为了安全起见没有让UI窗口来处理应用程序激活,反激活,以及操作系统关闭时对应的消息,而是内部创建了一个隐藏的窗口,专门用来接收WM_ACTIVATEAPP和WM_QUERYENDSESSION两个Windows消息。从线程的消息队列拿到这两个消息后,会触发WPF的Application.Activated,Application.Deactivated,Application.SessionEnding这三个事件。

    更详细的可参考Application类型的EnsureHwndSource(),AppFilterMessage(),这两个方法。

    上面的过程可用下图描述:

    Window2

    系统资源更改通知窗口(Window 4#)

    创建时机:Application的MainWindow的Xaml被反序列化成对象之后,需要确认Window的ThemeStyle的时候。

    用途:处理当操作系统的Theme发生改变后,以及诸如SystemColors,SystemFonts,电源,显示器等跟系统关联的资源发生改变时,更新WPF这边的表现。

    WPF在应用出现的MainWindow在初始化完成后,会创建一个隐藏的窗口,专门处理来自系统相关资源更新后的消息,比如WM_ThemeChanged,WM_SystemColorChanged,WM_DisplayChange,WM_PowerBroadcast等等。跟Window2#的初衷类似,为了安全起见,没有通过可见的UI窗口来处理这些消息,而是内容创建了这个隐藏的Window4#窗口来处理这些消息,确保UI窗口可以安全的更新由于系统Theme及相关资源改变后的表现。

    上面的过程可用下图描述:

    Window4

    也许你会问为什么先讲解了Window4,而没有讲用于用户交互的可见窗口(Window3)?那是因为Window3的内容比较多,而Window2#和Window4#相对比较独立,因此,放在本文当中介绍,关于Window3的详细描述,将在下一篇介绍, 敬请关注!



    本文是由葡萄城技术开发团队发布,转载请注明出处:葡萄城官网


  • 相关阅读:
    选择排序
    迭代器使用过程中为什么抛出ConcurrentModificationException
    自定义实现的ArrayList以及自定义实现的Iterator迭代器
    单链表
    collections方法记录
    JDK1.9中关于集合的新方法
    请使用时间相关的API,计算一个人从出生到现在一共活了多少天?
    java中对象的向上转型和向下转型
    异常相关知识整理
    可变参数相关知识
  • 原文地址:https://www.cnblogs.com/powertoolsteam/p/1933896.html
Copyright © 2011-2022 走看看