DWM和Direct2D都是基于Direct3D的技术,因此二者很容易配合在一起使用。在上一篇文章中所编写的小程序,要想启用DWM的半透明效果只需要对程序做些简单修改即可:
1.将背景画刷改为黑色;
2.在窗口类继承列表添加CDwmImpl<>,在OnCreate()函数中调用DwmExtendFrameIntoEntireClientArea();
3.修改创建RenderTarget的代码为:
D2D1_SIZE_U size = SizeU(rc.Width(),rc.Height());D2D1_PIXEL_FORMAT pixFormat = PixelFormat(DXGI_FORMAT_B8G8R8A8_UNORM,D2D1_ALPHA_MODE_PREMULTIPLIED);IFR(m_spD2dFactory->CreateHwndRenderTarget(RenderTargetProperties(D2D1_RENDER_TARGET_TYPE_DEFAULT,pixFormat),HwndRenderTargetProperties(m_hWnd,size),&m_spHwndRT));
修改后的效果: