Windows 窗口样式 什么是 WS_EX_NOREDIRECTIONBITMAP 样式

我以为我能够加入历史博物馆了,加入微软历史博物馆,本文也是和你们吹历史的博客html

简单说这个 WS_EX_NOREDIRECTIONBITMAP 样式是 Win8 提供的,用来作画面图层混合的功能。什么是画面图层混合功能?详细请看为什么使用 DirectCompositionwindows

玩法就是系统给你一个绘制表面,你在这个绘制表面上进行绘制,而后 DWM (桌面管理器 DWM Desktop Window Manager) 会拿出你绘制的表面来和其余的应用进行混合app

用这个方法和传统的区别是啥?普通的应用是给每一个窗口的客户区建立一个重定向表面,这个应用的窗口的全部绘制内容都绘制到这个表面。而经过 DirectComposition 可让应用本身管理和建立这个重定向表面,而让桌面管理器从应用本身建立的表面进行获取 Bitmap 和其余表面进行混合函数

这个方式有什么做用?主要做用就是提高性能,将 DX 配合上 DirectComposition 是最无敌的性能工具

那么什么的软件会用到这个功能?用到这个功能最多的是 UWP 应用,可是通过考古在 Win8 的全屏应用也用到这个技术,在 win32 函数里面的 CreateWindowEx 方法建立窗口的时候,能够经过传入 WS_EX_NOREDIRECTIONBITMAP 参数,这个参数须要传入到扩展样式里面,根据文档说的,添加这个样式以后的应用窗口不呈现到重定向表面。这适用于没有可见内容的窗口,或者使用表面之外的机制来提供其视觉效果的窗口。详细文档请看 Extended Window Styles (Winuser.h) - Win32 appspost

如何才能说德熙不是在骗你?建立一个 UWP 应用,而后运行这个应用。打开 spyxx 工具,找到这个窗口,如我建立的 KurdigalbaHercuqeahear 窗口,右击属性就能够看到窗口样式性能

对于 UWP 应用的实际窗口应该是 Windows.UI.Core.CoreWindow 窗口,右击属性切换到样式就能够看到 UWP 的窗口设置的样式就是 WS_EX_NOREDIRECTIONBITMAP 样式优化

全部的 UWP 应用都用上了 DirectComposition 技术,此时的 UWP 可以经过 dx 建立多个不一样的表面,将内容绘制到表面里面,而后通过 DWM 混合在屏幕显示orm

这就是 UWP 应用渲染快的一个缘由,如今的应用经过 DX 几乎压榨到底了,可是 DX 的渲染不等于屏幕显示,而渲染的延迟就是用户交互到屏幕显示之间。而 DX 到屏幕显示之间就差一个 DWM 桌面窗口管理器的处理,经过 DirectComposition 或者说 Composition API 技术就能作到压榨 DWM 的渲染延迟,下降从 DX 到屏幕显示的时间。固然处理 UWP 以外,使用 WPF 也是能够作到的,请看 WPF 使用 Composition API 作高性能渲染视频

固然这须要来聊下 DWM 是怎么工做的,从大佬的 Windows with C++ - High-Performance Window Layering Using the Windows Composition Engine 能够了解到,在 Vista 引入的桌面窗口管理器是这样作的,将每一个窗口渲染到屏幕外的表面或缓冲区,也就是上文说的普通应用的重定向表面。系统为每一个顶级窗口分配一个这样的表面,而且全部GDI,Direct3D以及Direct2D图形都呈现到这些表面。那为何这个表面叫重定向表面缘由是GDI绘图命令甚至Direct3D交换链表示请求都被重定向或经过复制(在GPU内作的)重定向表面

而经过 DirectComposition 则是由软件本身实现管理和建立表面,经过 DWM 调度的是图层合并。对应用来讲有更可控和更多的优化空间,能够压榨 DWM 部分的性能。对 DWM 来讲,能够经过合成图层的方法方便进行窗口特效处理,如亚克力效果。对其余应用来讲,能够经过重定向表面技术,获取其余应用的截图,这对于视频直播软件来讲能提高不少性能。关于应用截图请看 win10 uwp 录制任意应用屏幕

本文只是和小伙伴吹这个技术,不会告诉你们实际上应该如何作。每一个微软添加的 API 大部分都是有历史缘由的,为何添加这个 API 解决什么问题,大概都是遇到某个问题,可是正经解决方案解决不了,由于有历史缘由,因此换了一个咱看起来很诡异的方法解决

Extended Window Styles (Winuser.h) - Win32 apps

Windows with C++ - High-Performance Window Layering Using the Windows Composition Engine

相关文章
相关标签/搜索