WPF的消息机制(三)- WPF内部的5个窗口之处理激活和关闭的消息窗口以及系统资源通知窗口
来源:互联网 发布:数控编程实例详解 编辑:程序博客网 时间:2024/06/05 06:25
目录
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的详细描述,将在下一篇介绍, 敬请关注!
- WPF的消息机制(三)- WPF内部的5个窗口之处理激活和关闭的消息窗口以及系统资源通知窗口
- WPF的消息机制(二)- WPF内部的5个窗口之隐藏消息窗口
- WPF内部的5个窗口之隐藏消息窗口
- windows窗口关闭的消息响应机制
- 窗口的消息处理
- 消息机制、子窗口和父窗口的消息传递
- 窗口关闭的消息路由
- MFC应用程序传输的消息有三种类型:窗口消息、命令消息和控件通知
- WPF的窗口
- WPF--窗口的属性
- 【最佳实践系列】WPF多个窗口间消息的实时传递与响应
- windows窗口消息内部处理机制
- WPF制作窗口的启动和关闭动画
- 获取窗口激活消息的钩子函数
- WPF的消息机制
- Qt 中如何捕获窗口停用和激活的消息
- Qt 中如何捕获窗口停用和激活的消息
- Qt 中捕获窗口停用和激活的消息 .
- ASP.NET MVC3应用程序升级到WebForm
- 微软拼音输入法 2010 免疫学专业词典发布
- MyEclipse下设置合适的Content Assist快捷键
- Slice中的Class
- 查看sql server数据库连接数的三种方法
- WPF的消息机制(三)- WPF内部的5个窗口之处理激活和关闭的消息窗口以及系统资源通知窗口
- CMS采集上载助手(自己编写的内容采集上载软件)
- Sipdroid 简要评估
- [整理]循环,代码效率
- vmware如何压缩ext4格式的虚拟硬盘空间?
- windbg常用命令
- ASPxTreeList 怎么得到默认选中的值
- Tip - 24个程序员工具
- VS2010中VC9.0Runtime与VC10.0Runtime在win7上装不上提示error code 1603