Вы можете заставить окно рисовать в растровое изображение, имитируя сообщение WM_PAINT. Вам нужно будет настроить DC памяти и выбрать в нем свой целевой битовый массив, а затем передать этот дескриптор DC в качестве аргумента в сообщении рисования. Подробности см. В MSDN .
Когда все аргументы будут готовы к работе, выполните SendMessage (HwndHost.Handle, WM_PAINT и т. Д. И т. Д.). Когда этот вызов возвращается, растровое изображение должно содержать изображение окна.
Обратите внимание, что для полного рисования всего окна требуется много сообщений. Общий шаблон:
- Сделать недействительной всю клиентскую область окна. В противном случае ничего не будет нарисовано, потому что прямоугольник клипа будет пустым.
- Настройка растрового изображения в памяти DC
- Отправка сообщения WM_ERASEBKGND дескриптору окна с передачей в память дескриптора постоянного тока
- Отправляет сообщение WM_PAINT дескриптору окна, передавая в память дескриптор постоянного тока
Изображение окна теперь должно быть в битовой карте памяти.
Если вы также хотите захватить границу, оконную рамку и заголовок окна целевого окна, вам нужно будет смоделировать сообщение рисования, не связанное с клиентом: WM_NCPAINT является основным, вне макушки моей головы.
Существует также сообщение WM_PRINT, которое предположительно помогает при рисовании в памяти DC, предназначенной для печати, но у меня были проблемы с этим несколько версий назад Windows. Дочерние элементы управления не рисуют себя и т. Д.