我正在绘制常规HwndRengerTarget
,但其他与Direct2D无关的窗口重叠。
问题是当我绘制到HwndRengerTarget
时,这些窗口会被涂上。
我想告诉Direct2D不要触摸HwndRengerTarget
的特定区域(即不要触摸屏幕上已有的像素),以便这些窗口保持正确可见。
这可能吗?
如果我正常绘制然后在窗口上调用RedrawWindow
,它会闪烁很多。
感谢。
答案 0 :(得分:2)
如果要手动将渲染限制到某个区域,可以使用图层(ID2D1Layer
个对象)。
更多信息http://msdn.microsoft.com/en-us/library/windows/desktop/dd756654(v=vs.85).aspx
如果可见区域是矩形,则可以通过方法PushAxisAlignedClip
和PopAxisAlignedClip
使用轴对齐剪辑更简单。
http://msdn.microsoft.com/en-us/library/windows/desktop/dd742855(v=vs.85).aspx
将绘图限制为某种形状的另一种方法是将其渲染为位图,然后通过FillGeomtry
方法中的位图画笔使用此位图。
http://msdn.microsoft.com/en-us/library/windows/desktop/dd371933(v=vs.85).aspx
答案 1 :(得分:1)
为什么不安排窗口(HWND)以便Direct2D位于z-index的底部?它应该是其父母的第一个孩子。然后裁剪将自动进行。您可能需要WS_CLIPSIBLINGS窗口样式。
答案 2 :(得分:0)
我遇到了同样的问题。
通过为D2D子HWND调用CreateWindowEx LAST来修复。 所以在创建所有其他子窗口之后。