我正在尝试截取 Chrome 窗口的屏幕截图。它看起来像这样:
当我用于PrintWindow
获取屏幕截图时,我可以看到窗口标题栏/Chrome 选项卡区域闪烁。捕获的屏幕截图包含一个奇怪的 Windows Basic 风格的标题栏渲染(即使我的机器运行 Aero 主题):
我注意到其他一些应用程序也表现出类似的行为,它们在屏幕上闪烁,但标题栏工件在捕获的屏幕截图中不可见。执行此操作的应用程序包括 Office 2010、IE 10 和 Trillian 选项卡式聊天窗口 — 换句话说,扩展非客户区的窗口似乎存在此问题。
重现这一点的代码很简单:
void Screenshot(HWND hWnd) {
RECT rc;
GetClientRect(hWnd, &rc);
HDC hdcScreen = GetDC(NULL);
HDC hdc = CreateCompatibleDC(hdcScreen);
HBITMAP hbmp = CreateCompatibleBitmap(hdcScreen,
rc.right - rc.left, rc.bottom - rc.top);
SelectObject(hdc, hbmp);
//Print to memory hdc
PrintWindow(hWnd, hdc, PW_CLIENTONLY);
}
为什么我看到闪烁和奇怪的视觉伪影?我能做些什么来阻止它?