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