使用DWM / DX将仿射变换应用于窗口?

时间:2016-03-10 13:49:49

标签: windows directx dwm

是否有人知道在Windows上应用仿射变换的方法,使用桌面窗口管理器,或者与DirectX的组合?

想想Windows 7中的Flip3D - 如果我想在桌面上实现这样的过渡。

澄清: 问题是仅关于启用DWM的窗口。所以Windows> = 7。

2 个答案:

答案 0 :(得分:-1)

Microsoft在2D affine transform effect

中有一个built-in effects

C ++ documentation的一个例子是:

ComPtr<ID2D1Effect> affineTransformEffect;
m_d2dContext->CreateEffect(CLSID_D2D12DAffineTransform, &affineTransformEffect);

affineTransformEffect->SetInput(0, bitmap);

D2D1_MATRIX_3X2_F matrix = D2D1::Matrix3x2F(0.9f, -0.1f,   0.1f, 0.9f,   8.0f, 45.0f);

affineTransformEffect->SetValue(D2D1_2DAFFINETRANSFORM_PROP_TRANSFORM_MATRIX, matrix);

m_d2dContext->BeginDraw();
m_d2dContext->DrawImage(affineTransformEffect.Get());
m_d2dContext->EndDraw();

执行以下矩阵操作:
https://msdn.microsoft.com/dynimg/IC554554.png

答案 1 :(得分:-1)

为Win95 / XP / Win2000编写了一个名为“madotate”的库。它是一个用于在Windows上进行3d翻转等的开源C ++ API。如果尚未适应DWM,可能不会采取太多措施。