我试图在一个看不见的上画出半透明的矩形.然而,使用ID2D1HwndRenderTarget::Clear
清除窗口只会使整个窗口变黑,所以当我在顶部绘制矩形时,它们看起来是半黑色的。
如果我不清楚(),不画,那么窗口是无形的,它应该是。这里的罪魁祸首是“清清楚楚”,但如果我不使用它,那幅画就会很糟糕。
下面是我在我的WindowProc中使用的代码:
case WM_PAINT:
// Begin drawing
pRenderTarget->BeginDraw();
pRenderTarget->SetTransform(D2D1::Matrix3x2F::Identity());
// Clear the window
pRenderTarget->Clear();
// Paint the panel and its children
D2DSurface()->StartPainting();
{
D2DSurface()->PaintTraverse(panel);
}
D2DSurface()->FinishPainting();
// Finish drawing
HRESULT hr = plat->pRenderTarget->EndDraw();
提前感谢!
发布于 2012-05-16 22:29:24
在创建RenderTarget时,您必须告诉D2D,您希望以像素格式使用alpha (在预乘模式下):
HRESULT hr = mD2DFactory->CreateHwndRenderTarget(
D2D1::RenderTargetProperties( D2D1_RENDER_TARGET_TYPE_DEFAULT, D2D1::PixelFormat( DXGI_FORMAT_UNKNOWN, D2D1_ALPHA_MODE_PREMULTIPLIED ) ),
D2D1::HwndRenderTargetProperties( mWindow, size ),
&mRenderTarget );
在此之后,调用alpha值为零的Clear()
运行得很好。
发布于 2010-10-28 02:10:22
透明度是个问题。唯一支持每像素透明度的窗口是WS_EX_LAYERED窗口.这些窗口是为诸如拖放图标之类的用途而设计的,这会导致其他每一种使用中的问题。
使用D2D和WS_EX_LAYERED窗口需要使用DXGI呈现目标。对于EndDraw,从呈现目标中获取一个DC,然后将其传递到分层窗口,并告诉分层窗口更新自己。(用HWNDRenderTarget试试--它可能会使设备驱动程序崩溃)。
我怀疑你的窗户是透明的,因为它根本就没有绘图。
另一个你可能会遇到的..。如果窗口足够透明,鼠标单击将通过它到达基础窗口。
发布于 2015-12-08 03:28:11
使用ID2D1DCRenderTarget
而不是ID2D1HwndRendTarget
,然后在绘图开始之前绑定窗口的设备上下文(DC)。
当然,您需要为窗口设置WS_EX_LAYERED
,然后调用SetLayeredWindowAttributes
设置透明颜色:
SetLayeredWindowAttributes(hWnd, RGB(0, 0, 0), 0, LWA_COLORKEY);
截图:
https://stackoverflow.com/questions/2603276
复制相似问题