我们正在开发一个剥皮的应用程序有各种圆边上其大部分的窗口。我使用的窗口地区的定义非矩形的形状,但几乎每个人都对象的锯齿状的混淆这个原因,因为象素只能是要么完全不透明或完全透明的。

我已经想出了一个解决这一使用分层的窗户,但我们希望确保这个运行(并希望运行良好)在各种各样的系统,并且我想看看如果任何人有任何更好的想法或方法来优化我在做什么。我知道层的窗户需要win2000或之后,这是可以的,因为这已经是一个要求其他原因。从一些基本测试,这看起来确定在Vista,但那是没有保证。

这里就是我要做的:我有一个窗口,叫它,控制和文本以及任何包括这窗口。我有窗口B作为一个孩子的窗口,除非它有WS_POPUP风格,而不是WS_CHILD,使它可以本身的位置以外的地区并绘制上的控制。窗口B还有WS_EX_LAYERED风格,并在初始化,我呼 与ULW_ALPHA标志和一个来源DC有32位位alpha通道,让它绘制每素。

这位使用源DC窗口B是很多只是像素边界的窗口,我想尽顺利地从窗口的背景下进入充分的透明度。我会跳过的整整两个窗口的做法,只是使用一个分层的窗口,只是当你使用,它是来自一个缓冲区保持存在,取代典型的WM_PAINT消息,所有这一切,并试图获得互动的儿童的控制(和儿童windows)的工作以及与这听起来像一个显着的理想(和可能甚至不会的工作的一切).

因此,它基本上是窗口一所有儿童的控制和什么,窗口B浮动直接在它上,绘制一个很好的平稳的边界。我应WM_MOVE邮件和因此关于通过移动的窗口B随着它,我有一窗口B障碍,因此它永远不可能得到的关注或投入(点击已经过去,由于它的部分是零透明度,例如大多数其内部分,已经被排除在挑选).

踢,这里的作品看起来像,展示什么我的意思是更好一点。

因此,它的工作原理,但我不能确定这是真正的最佳方式做到这一点。我有两个问题:

  • 这听起来是不可接受的,或者是否有任何东西很可怕吗?
  • 作为其目前工作的,现在看来似乎是使用屏幕上的缓冲区大小的窗口(其可以达到1024×768)即使很少的几个象素,它具有任何非零透明度的数据--它是值得的开销和其他复杂性的切割成单独的边界件和合成他们在一起吗?
有帮助吗?

解决方案

我的产品使用分层窗口提请小片附上给每个窗口。我用分层的窗口获得平滑四舍五入而没有混淆。唯一讨厌的问题我已经跑到这么远是,一些载窗户涂在顶层的窗户的Windows XP和Vista没有梦工场.它是一种低水平的问题和Microsoft没有非常有帮助的。你可以重现它打开了谷歌地球和拖你的应用程序通过的主要呈现窗口,你的分层的窗口将消失。

其他提示

我发现了一件事:具有单独的框架件可呈现明显快于具有一个巨大的框架窗口,与一个大广阔的空素在中间。我没有任何实际数字,但只是从一个快速测试一试两个,有一个明显的延迟时的几个窗户完整的框架windows互重叠,但是当他们的框架被切成小组,这是更迅捷。任何开销,具有多个层的窗户有自己的设备的情况下没有贡献的多,具有大片的素(空白或不行!) 仍然有助于更多的负载。

  1. 不要忘了测试下RDP和虚拟机(Hyper-V&VMWare)
  2. 尝试几个愤怒卡,并在笔记本电脑和笔记本电脑(如果适用)。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top