使用Direct2D在桌面上绘制alpha混合图形

时间:2018-02-15 21:43:00

标签: c# wpf windows sharpdx direct2d

我正在使用纯Direct2D和C#与SharpDX构建UI。 这个用户界面是用户友好和美观,同时效率高。

Direct2D-powered toolbar

为了演示,我使用 hacky 未记录的API(请参阅this question)构建了一个原型,但我绝不打算使用它进行生产,向后兼容首要原因是:

var accent = new User32.AccentPolicy { AccentState = AccentState };
int accentStructSize = Marshal.SizeOf(accent);

// allocate space for the struct
IntPtr accentPtr = Marshal.AllocHGlobal(accentStructSize);
Marshal.StructureToPtr(accent, accentPtr, false);

// set composition data
var data = new User32.WindowCompositionAttributeData {
  Attribute = User32.WindowCompositionAttribute.WCA_ACCENT_POLICY,
  SizeOfData = accentStructSize,
  Data = accentPtr
};

// change window composition attributes and release resources
User32.SetWindowCompositionAttribute(Handle, ref data);
Marshal.FreeHGlobal(accentPtr);

我知道对此的即时响应是使用WPF,但我完全限于原始 Direct2D调用,因为我打算将所有UI逻辑移动到DLL以便注入DirectX应用程序(虽然不确定我将如何执行此操作,但不在此问题的范围内。)

在Windows 8.1上,有DirectComposition,可在透明窗口之上实现高效的alpha混合。

但Windows Vista和7中没有这样的东西(即使使用平台更新)。

有没有办法可以使用纯的非 hacky Direct2D / DirectX代码来使这个UI在所有Windows版本(最好是Vista SP2以上版本)上运行?

0 个答案:

没有答案