有没有办法使用本机C ++从WPF窗口捕获位图?

想象一下MDI应用程序中的一个文档窗口,其中包含一个WPF子窗口,比如说一个侧边栏。 如何获得一个包含WPF像素和GDI(非wpf)像素的位图

我发现,当为Win7任务栏应用程序图标hover进行缩略图预览时,在预览的WPF像素应该是黑色的部分。 我目前的方法只是抓取文档窗口的位图捕获。 然后我得到一个预览的DC,从它做一个内存DC,并select我的位图。 然后我做一些尺寸调整,并将内存直stream转换为实际的直stream电。 我猜测BitBlt操作没有考虑到WPF像素是硬件加速的事实,因此需要从graphics硬件中抓取。 所有在GDI中的东西都pipe理得很好,虽然当没有WPF子窗口,预览图像看起来很好。

我想知道是否有可能从本机C ++获取WPF窗口的位图。 然后,我可以把它放到之前预览的黑色区域。

也许我不是正确理解你现在的方法,但是你可以在屏幕DC上做一个BitBlt()到你的内存DC吗? 你需要得到你的窗口的屏幕矩形,但这不应该太糟糕。

为了解决这个问题,我必须用本地代码创建一个包含虚拟方法的抽象类来获取在C ++ / CLI中实现的位图。 在托管实现中,我使用.NET的RenderTargetBitmap类来获取WPF窗口的位图捕获,然后填充传入的CBitmap对象(请参阅如何从C ++ / CLI中的RenderTargetBitmap获取BITMAP结构? )。 在非托管调用程序中,我使用了虚拟方法来获取位图。

总之,没有办法通过简单地使用非托管C ++来获取位图,因为WPF和GDI实际上并不能一起工作。