问题标签 [aero]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1855 浏览

windows-7 - 桌面窗口管理器捕获整个屏幕

我想知道是否有人可以给我一个如何在 Windows Vista/7 中捕获整个屏幕的起点?我知道如何在以前版本的 Windows 中执行此操作,但我真的很想将所有内容都保留在 D3D 堆栈中,而不求助于 GDI/BltBit 调用。

我意识到如果你有使用 DWM API 的 HWND,你可以获得给定窗口的实时缩略图,但是你如何获得整个桌面的“缩略图”?

谢谢,

亚历克斯

0 投票
2 回答
642 浏览

winapi - 窗口截图

我正在尝试截取所有打开的窗口,以及最小化的窗口。目前我正在使用此代码: http: //www.developerfusion.com/code/4630/capture-a-screen-shot/

但它不适用于最小化的窗口以及自 Vista 以来出现 Glass 效果的区域,例如资源管理器标题栏是黑色的。谁能帮我吗?

我的目标是创建类似于 Flip 3D 的东西;如果有人也知道如何创建实时预览,那就太好了。

0 投票
3 回答
1830 浏览

windows - 启用桌面合成是否需要双缓冲?

启用桌面合成后是否仍需要双缓冲?

在 Microsoft 的应用程序兼容性指南中:

图形设备接口 (GDI)

在 Windows Vista 和 Windows Server 2008 之前,窗口句柄 (HWND) 直接绘制到屏幕上,这有一定的好处,但限制了 Windows 显示和管理顶级窗口的方式。在 Windows Vista 和 Windows Server 2008 中,所有顶级窗口都被渲染为离屏位图(类似于 WS_EX_LAYERED),桌面窗口管理器将图像组合在一起以绘制桌面。

听起来现在所有的渲染都是在离屏位图上完成的:

窗口被渲染为离屏位图

它是否正确?

我问的原因是因为我在标准油漆周期中仍然看到闪烁:

  • WM_ERASEBKGND
  • WM_PAINT

启用桌面合成时:

替代文字

我会假设在调用之间

所有的绘画都会发生在后台缓冲区:

窗口被渲染为离屏位图

同时,前缓冲区将不受影响。

0 投票
1 回答
1635 浏览

wpf - WPF: How to have custom button template that uses system's button background by default?

I am creating a style that changes a ControlTemplate of a Button (it actually adds arrow on the right, so that the button looks like dropdown button (which is missing in wpf)).

Inside of template, I put the actual button (because I need the result to still be like button - I could change only ContentTemplate, but I need to display the actual content together with arrow, and putting ContentPresenter inside ContentTemplate yields stack overflow - wpf just expands the template into the presenter and goes on and on), together with arrow.

My problem is that I would like the user to be able to change button's background, so I need to bind Background="{TemplateBinding Background}". With this, the user would have to always provide the background, otherwise it would be null. To prevent this, I understand I need to provide default value for the background, so I added <Setter Property="Background" Value="default Background goes here"/>

The question is, what should be a value of this setter? I assume that wpf's built-in styles are loaded automatically for every application, and I have looked into aero.normalcolor.xaml, where they provide ButtonNormalBackground style, and later use it as default button style <Setter Property="Background" Value="{StaticResource ButtonNormalBackground}"/> (aero.normalcolor.xaml, line 47).

Exactly what I wanted, however, when I use this setter, the static resource is not found. I then changed it to DynamicResource, but in that case, the button's background stays transparent - the ButtonNormalBackground isn't used!

How should I provide system's button look as default value? Thank you!

PS: dtto for BorderBrush, BorderThickness - geez, it seems that I am not allowed the tricks that WPF authors use all the time :/

My style:

0 投票
3 回答
3017 浏览

windows - Windows Aero:要画什么颜色才能使“玻璃”出现?

为了使玻璃出现,我必须在客户区涂上什么颜色?

我已经使用以下方法将表单的框架扩展到客户区:

我找不到任何来自 Microsoft 的官方文档,说明 DWM 将寻找什么颜色和/或alpha来替换玻璃。DwmExtendFrameInClientArea上的文档甚至没有提到需要自定义颜色。只有传闻和神话甚至需要特殊的颜色。

我能找到的最接近的是 MSDN 上的一个主题:

使用 DWM 自定义窗框

为了使扩展帧可见,每个扩展帧边下的区域必须具有 alpha 值为 0 的像素数据。

更新:还有一篇博文:

面向开发人员的 Windows Vista – 第 3 部分 – 桌面窗口管理器

碰巧 RGB 黑色 (0x00000000) 的位模式与 100% 透明 ARGB 的位模式相同,因此您实际上可以使用“黑色”GDI 画笔进行绘制,并假设您已指示 DWM 模糊绘制区域,结果将是所需的玻璃效果。

如果我从字面上理解他们所说的(alpha 值为零的像素数据),我会构造一个 alpha 为零的颜色,并在扩展区域中绘制它:

但没有出现玻璃效果:

替代文字


如果我忽略引用的 MSDN 主题,而是使用完全不透明的黑色(而不是完全透明的黑色):

玻璃效果确实出现了:

替代文字

然后我被引导相信不透明的黑色是 DWM 将寻找用玻璃替换的像素值。

但是,我如何在玻璃区域上涂黑色物品?


我已经测试在玻璃区域上画一个黑色矩形,旁边有一个圆圈。奇怪的是,矩形没有出现,而圆形却出现了;两者都是相同的颜色:

替代文字

那么世界上到底发生了什么?在扩展框架区域涂上什么颜色才能使玻璃出现?


更新 2

使用Adisak的建议来准确隔离 Aero 的愚蠢之处,在这里我在黑色圆圈内绘制了一个黑色矩形:

替代文字

FillEllipse 不支持画黑圈吗?


更新 3

Pondidum想知道使用透明黑色调用Graphics.Clear是否会使玻璃可见:

确实有效,但您仍然无法在玻璃上绘制不透明的黑色物品:

替代文字


更新 4

查看Microsoft 的 Vista Bridge 库(围绕不会添加到 .NET 的 Vista 功能的托管包装器),他们只能设法让扩展玻璃框架在 WPF 表单上工作,而不是 WinForms。

也可以看看

0 投票
1 回答
282 浏览

windows-vista - 在 Vista 中关闭 Aero 的不良行为

我有一个 Directx9 应用程序,它需要在禁用 Aero 的机器上运行。该应用程序以窗口模式运行。首次创建窗口时,它在单个屏幕中看起来很好。当我以跨越连接到同一个图形适配器(和 GPU)的两个屏幕的方式移动窗口时,一个屏幕上的区域似乎反映了另一个屏幕上的区域。当我跨越连接到不同图形适配器的两个屏幕时,我没有问题。

任何标准的窗口应用程序都可以轻松复制这一点,例如 8 月 9 日 DirectX SDK 中的“教程 2:顶点”。

我在窗口化的 OpenGL 应用程序中看到了同样的问题。

当 Windows 在启用 Aero 的情况下运行时,这不是问题,但我需要在禁用 Aero 的情况下运行应用程序。(Aero 在我的实际应用程序中引起其他问题,由于我在 GPU 中进行的处理,在不可预测的时间翻转它自己的后缓冲区,以我的渲染线程无法检测到的方式搞砸了我的显示平滑度。)

我正在运行带有 nVidia Quatro 4800 显卡的 Windows Vista Enterprise x64。

--而且,我刚刚注意到这只是在我使用旋转屏幕时出现的问题,在 nVidia 控制面板中旋转了 90 度。我想……就这样吧?当我使用旋转屏幕时,任何人都可以提出解决方案吗?

有任何想法吗?

0 投票
1 回答
1145 浏览

vb.net - Aeroglass 和 Visual Basic.Net

是否有任何教程,或者,是否有用于在 VB.NET 中控制 Aeroglass 的简单代码?我想知道如何玩各种效果,如果可能的话,如何在 Paint.NET 3.5 中完成 Aeroglass 效果。(顶栏的内侧不是直的。

0 投票
0 回答
787 浏览

winapi - Win7:如果禁用 Aero,辅助监视器的监视器 DC 会偏移

设想:

多显示器机器上的屏幕捕获。

辅助监视器的屏幕截图[这是唯一受影响的]

关闭 Aero:

通过以下方式为辅助监视器创建一个 [新] DC:

结果:

DC 将获得一个偏移量,该偏移量“指向”虚拟显示器的错误部分

在哪里DCOffset.x.y将是!= 0

评论:

此行为不会在 Vista 上发生

如果 Aero Off 和 DC 创建之间存在延迟,则 DC 可能会在一段时间内正确 [== 无偏移],但如果移动窗口或更改其 z 顺序,则 DC 将获得偏移。解决方法:发生偏移时创建新的 DC。

受影响的图形适配器:Intel GMA 4500、Nvidia 9600GT

0 投票
1 回答
239 浏览

winapi - WinXP 上的 Flip-3D 和分层截图

我有两个问题,但不知何故相关:

  1. 如何在 Windows XP 上实现没有 Aero API 的翻转 3d?

  2. 你们在 Mac 上见过这个很棒的应用程序吗?http://layersapp.com有没有可能在 Windows 上有类似的东西?如果解决了#1 的问题,我想我们可以做类似的事情

我知道如何截取单个窗口的屏幕截图,只需阅读 DC 的位图。但是如何截取顶部未激活的那些窗口的屏幕截图?

0 投票
1 回答
301 浏览

wpf - Aero 是否有助于 WPF 性能?

我已经推迟了 WPF 开发很长一段时间,但是,我终于开始考虑继续前进了。我知道 WPF 是一种全新的渲染“机制”,它使用 GPU 的能力(对吗?),这与 Winforms 占用的 CPU 能力不同。如果我没记错的话,这种级别的 GPU 支持是 Aero 附带的,因此 WPF 应用程序只能在 Aero 环境中以全性能运行。它是否正确?我的意思是,如果我运行 WPF(有很多动画和玻璃),它在 Win 7 Home Basic 或 XP 上就不会运行,对吗?