获取选项卡式MDI表单的位图/ DC

时间:2011-11-14 08:30:49

标签: winforms winapi gdi

我有一组表单可视化为主表单的MDI选项卡子项(通过Infragistics UltraTabbedMDIManager,但此API不是那么重要)

我使用GetDC(),CreateCompatibleDC(),CreateCompatibleBitmap(),SelectObject(),BitBlt()..将这些表单的设备上下文的位图blit到某个内存中。 这适用,但仅适用于活动的MDI子窗体,即用户可见的窗体。 如果我为不活动的表单(当前未显示的任何选项卡)执行此操作,我会在内存区域中显示黑屏,或者甚至可以获得屏幕上方的“副本”。 如果我为不再可见的表单执行此操作,我也会看到黑屏。

如何获取这些隐藏表单的位图?我是否必须使用缓存,还是可以使用其他一些技巧? 我不能使用Winforms DrawToBitmap()函数,因为表单包含一些无法用它检索的低级图形内容。 如何使用winapi检索这些“隐藏”形式的DC的位图?

1 个答案:

答案 0 :(得分:0)

我设法在user32.dll中使用PrintWindow API。 它解决了MDI选项卡问题,但它没有解决隐藏表单的问题。 我通过在屏幕外的某个位置简单地显示表单来解决这个问题。 似乎“终极”方式是使用(未记录的)dwm.dll,但这不是那么明智,因为Windows版本之间的接口不同。