【问题标题】:What's the best method for drawing overlay graphics on Windows?在 Windows 上绘制叠加图形的最佳方法是什么?
【发布时间】:2010-12-13 07:08:56
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

    标签: wpf direct2d layered-windows


    【解决方案1】:

    WPF 可以非常轻松地完成您的任务,但是,由于图形驱动程序错误(显然图形硬件制造商不测试分层 Direct3D每个像素的 alpha 值非常好)。

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-13
        相关资源
        最近更新 更多