2016-04-27 57 views
0

我从他们的窗口句柄(hwnd)屏幕捕获应用程序窗口,并使用GetWindowDC获取设备上下文,我可以使用它来捕获整个窗口,顶级菜单和滚动条。如何获取窗口,子菜单和上下文菜单的设备上下文?

HDC hdcWindow = GetWindowDC(hwnd); 
HDC hdcMemDC = CreateCompatibleDC(hdcWindow); // or hdcScreen 

当我打开一个子菜单例如记事本左上角的文件菜单,该菜单不被捕获。它似乎并未包含在设备上下文中。有没有一种方法可以获取应用程序窗口中的所有设备上下文?

+1

您需要获得显示DC(GetDC(NULL)),然后BitBlt窗口矩形 –

+0

@AlexK。从技术上讲,弹出菜单可以延伸到窗口矩形之外... –

+0

嗨,亚历克斯,这工作得很好,谢谢。 – Anton

回答

0

GDI提供的显示抽象并不知道任何由桌面组合执行的魔术 - 窗口DC代表显示器上窗口的区域,并且如果窗口未显示或被其他窗口遮挡,区域被裁剪出来并且不存在 - 您无法使用窗口DC对其进行滤波,并且在读取它时您可能会变黑。因此,要从多个窗口中捕获包含内容的屏幕区域 - 您需要使用屏幕而不是窗口DC。

+0

此答案如何解决问题中提出的问题? – IInspectable