Вы можете использовать DirectComposition, LayeredWindows, DesktopWindowManager или WPF. Все методы имеют свои преимущества и недостатки:
-DirectComposition является наиболее эффективным, но требует Windows 8 и ограничен 60 Гц.
-LayeredWindows сложно заставить работать с D3D через Direct2D-взаимодействие с использованием DXGI.
-WPF относительно легко использовать через D3DImage, но он также ограничен 60 Гц и DX9 и не имеет MSAA. Возможны взаимодействия с более высокими версиями DX через DXGI, также можно использовать MSAA, когда цель MSAA-Rendertarget разрешена для нативной поверхности, отличной от MSAA.
-DesktopWindowManager отлично подходит для обеспечения высокой производительности, доступной с Windows Vista, но версии DirectX, похоже, ограничены версией, которую использует DWM (все еще DX9 в Vista). Обходные пути для более высоких версий DX должны быть возможны через DXGI, если они доступны.
Если вам не нужна аплха на пиксель, вы также можете использовать значение непрозрачности полупрозрачной формы.
Или вы используете собственный метод Win32 для глобальной альфы Window (помните, что альфа, равная 0, не улавливает ввод мыши):
SetWindowLong(hWnd, GWL_EXSTYLE, GetWindowLong(hWnd, GWL_EXSTYLE) | WS_EX_LAYERED);
COLORREF color = 0;
BYTE alpha = 128;
SetLayeredWindowAttributes(hWnd, color, alpha, LWA_ALPHA);
Мне удалось использовать все описанные методы с C # и SharpDX, но в случае DirectComposition, LayeredWindows и собственного Win32 требовалось немного C ++ - Wrappercode. Для начала предлагаю перейти через WPF.
person
thewhiteambit
schedule
18.01.2015