4

我正在使用需要创建各种自定义窗口类型的 Win32 应用程序。特别是,这些窗口通常是非矩形的,有阴影,或者大部分是透明的。

我目前正在使用WS_EX_LAYEREDwithUpdateLayeredWindow创建透明窗口,然后可以在其上绘制任意图形。但是,我发现分层窗口受到限制,因为您不能有分层的子窗口,分层窗口也不能正确承载“普通”Win32 控件。

我们的代码库已有数年历史,主要使用 Win32 和 GDI,但我们正在对事物进行现代化改造,是时候研究更新的技术了。

我考虑过在 WPF 中进行自定义窗口化,但我担心我所读到的有关“空域”问题的内容。似乎 WPF 使用分层窗口来完成其每像素 alpha 混合,因此它似乎也会受到我以前经历过的限制的影响。

我对 Direct2D 知之甚少(真的一无所知),但该技术听起来可能很有趣。虽然,我找不到任何关于它能够做覆盖窗口的参考。

所以,所有这些都让我想到了我的问题:在 Windows 下做覆盖窗口的最佳技术是什么?(Vista 和 Win7 至少,XP 会很高兴)

我是否忽略了一些特别好的技术?任何建议,将不胜感激。

4

2 回答 2

4

WPF 可以很容易地完成您正在寻找的事情,但是,由于图形驱动程序错误,WPF 的这一特殊功能(具有逐像素透明度的窗口)往往会出现很大问题(显然图形硬件制造商不会使用 per像素 alpha 值非常好)。

WPF 确实使用分层窗口来实现透明度,但它不使用“普通”win32 控件,窗口中的所有 wpf 控件仅使用一个 win32 窗口来呈现它们,它们都支持透明度。

只有当您在 WPF 窗口中托管 WinForms 控件时,才会出现“空域”问题。

于 2009-11-05T08:53:09.820 回答
2

我推荐 Direct2D 和 DirectWrite,因为您可以获得高质量的渲染,与 GDI 或 .Net 空间中的任何操作相比,它们的渲染速度也快得离谱。唯一的问题是您需要 Vista 或更高版本的操作系统才能使用它。

于 2009-11-13T08:19:01.467 回答