目录

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(),这两个方法。

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

系统资源更改通知窗口(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,而没有讲用于用户交互的可见窗口(Window3)?那是因为Window3的内容比较多,而Window2#和Window4#相对比较独立,因此,放在本文当中介绍,关于Window3的详细描述,将在下一篇介绍, 敬请关注!

转载于:https://blog.51cto.com/powertoolsteam/477221

WPF的消息机制(三)- WPF内部的5个窗口之处理激活和关闭的消息窗口以及系统资源通知窗口...相关推荐

  1. android handler的机制和原理_一文搞懂handler:彻底明白Android消息机制的原理及源码

    提起Android消息机制,想必都不陌生.其中包含三个部分:Handler,MessageQueue以及Looper,三者共同协作,完成消息机制的运行.本篇文章将由浅入深解析Android消息机制的运 ...

  2. WPF的消息机制(二)- WPF内部的5个窗口之隐藏消息窗口

    原文:WPF的消息机制(二)- WPF内部的5个窗口之隐藏消息窗口 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/powertoolsteam/ar ...

  3. 一起谈.NET技术,WPF的消息机制(一)- 让应用程序动起来

    前言 谈起"消息机制"这个词,我们都会想到Windows的消息机制,系统将键盘鼠标的行为包装成一个Windows Message,然后系统主动将这些Windows Message派 ...

  4. windows消息机制详解-3

    1. 引言 Windows 在操作系统平台占有绝对统治地位,基于Windows 的编程和开发越来越广泛. Dos 是过程驱动的,而Windows 是事件驱动的[6],这种差别的存在使得很多Dos 程序 ...

  5. Android消息机制详解

    *本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 Android消息机制 这一定是一个被写烂了的专题吧.那本媛也来凑一个热闹吧.哈哈 这篇博客将会涉及以下内容: 消息机制概述 UM ...

  6. 理解 Android 消息机制

    本人只是Android小菜一个,写技术文章只是为了总结自己最近学习到的知识,从来不敢为人师,如果里面有不正确的地方请大家尽情指出,谢谢! 本文基于原生 Android 9.0 源码来解析 Androi ...

  7. Unity 游戏框架搭建 (五) 简易消息机制

    什么是消息机制? 23333333,让我先笑一会. 为什么用消息机制? 三个字,解!!!!耦!!!!合!!!!. 我的框架中的消息机制用例: 1.接收者 using UnityEngine;names ...

  8. 深入BCB理解VCL的消息机制

    深入BCB理解VCL的消息机制 引子:本文所谈及的技术内容都来自于Internet的公开信息.由笔者在闲暇之际整理 后,贴出来以飴网友,姑且妄称原创.每次在国外网站上找到精彩文章的时候,心中都 会暗自 ...

  9. Android消息机制基本原理和使用

    在Android开发过程中,我们常常遇到子线程更新UI的需求,例如在子线程进行耗时较长的下载,等下载完成之后,再去更新UI,提示用户下载完成,直接在子线程里更新UI,会得到报错提示:Only the ...

最新文章

  1. 一文梳理水下检测方法
  2. Gym - 101972B Arabella Collegiate Programming Contest (2018) B. Updating the Tree 树DFS
  3. 恐怖小说之王——斯蒂芬·金 (转贴)
  4. 如何使用jstack分析线程状态
  5. Unicode和Utf-8
  6. maven添加sqlserver的jdbc驱动包
  7. linux定时器tinner,第三章 套接字相关数据结构--基于Linux3.10
  8. python画相关性可视化图_Python可视化matplotlibseborn16-相关性热图
  9. 转:gcc编译C++程序
  10. grub rescue修复
  11. 大数据分析过程中包含哪些技术
  12. ASP.NET事件回传机制
  13. ASP.NET WebAPI导入EXCEL数据
  14. 利用C#编写一个GPS高程拟合(二次曲面拟合模型)程序
  15. 编译CWM-recovery
  16. centos修改mysql数据库密码修改_centos7 mysql 修改数据库密码
  17. 小凯的疑惑(Noip 提高组 2017 d1 1)+[USACO4.1]麦香牛块Beef McNuggets
  18. 深入学习区块链的隐私保护(四)秘密共享
  19. IE无法打开网页却能上网的解决方案(转载)
  20. AWS 云从业者认证(AWS Certified Cloud Practitioner)

热门文章

  1. IOS使用Instrument-Time Profiler工具分析和优化性能问题
  2. AngularJS学习总结
  3. [转]计算机存在两个管理员,删除其中一个,administration隐藏显示
  4. 关于Mobile Wireless Congress 颁发的一个奖项的联想(2)
  5. 2019 年,容器技术生态会发生些什么?
  6. Linux学习---Day02
  7. ylbtech-LanguageSamples-PythonSample
  8. JDK8新特性之Stream流
  9. Linux系统进程管理
  10. JVM性能优化, Part 2 ―― 编译器