Я пытаюсь сделать снимок экрана из окна Chrome. Это выглядит следующим образом:PrintWindow вызывает мерцание, странные артефакты в заголовке
Когда я использую 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);
}
Почему я вижу мерцающий и странные визуальные артефакты? Что я могу сделать, чтобы остановить его?
Используя свой код, я не могу воспроизвести. Windows Seven 64. Сборка 32b или 64b. Использование PW_CLIENTONLY или 0. Цель: основное окно Chrome или главное окно Excel 2010. No Flicker, «почти» хороший PNG (с использованием GDIPLUS) – manuell
@manuell: Интересно, что из моего фактического приложения мерцание происходит каждый раз, когда я вызываю «PrintWindow» (который вскоре после того, как окно получает фокус). В тестовом приложении barebones, где я делаю 'while (1) {Screenshot (hWnd); Сон (100); } ', мерцание прерывисто. – josh3736
Службы процессов «фокус» и «активность» окна сообщения длинный/до/фактическая краска происходит, imho. Держу пари, что ваш запрос приходит слишком рано. Постарайтесь отложить больше. Трудно помочь без контекста. Скриншоты, сделанные с хорошим старым BitBblt, не мерцают, а потребляют меньше ресурсов, но дают иногда забавные результаты, когда окна просто «сводят к минимуму» или «восстанавливают» – manuell