Обычный способ захватить изображение окна — вызвать:
HDC SharedWndDC = GetWindowDC(SharedWnd);
BitBlt(BitmapDC, 0, 0, width, height, SharedWndDC, 0, 0, SRCCOPY /* |CAPTUREBLT */);
ReleaseDC(SharedWnd, SharedWndDC);
Который в системе, работающей под управлением DWM, хорошо захватывает только рассматриваемое окно, даже если оно перекрывается другими окнами или частично за пределами экрана, или еще что-то.
Но он не работает правильно в некоторых окнах (предположительно тех, которые используют WPF) и делает забавные вещи со стеклянными областями. По сути, захват GDI не работает с вещами, не относящимися к GDI.
Я понимаю, что я действительно хочу захватить «задний буфер» или «передний буфер» Direct3D, но многочисленные примеры, которые я видел для этого, предназначены для захвата всего экрана или рабочего стола. Не зная Direct3D, я не могу найти пример или простое утверждение о том, как получить правильный объект для существующего окна, из которого я мог бы затем получить буферы.
Может ли какая-нибудь добрая душа хотя бы показать этот недостающий кусочек?
-Джон