Получить Bitmap / DC форм MDI с вкладками

У меня есть набор форм, которые визуализируются как дочерние элементы вкладки MDI основной формы (через Infragistics UltraTabbedMDIManager, но этот API не так важен)

Я использую GetDC (), CreateCompatibleDC (), CreateCompatibleBitmap (), SelectObject (), BitBlt () .., чтобы перенести растровое изображение контекстов устройства этих форм в некоторую память. Это работает, но только для активной дочерней формы MDI, которая видна пользователю. Если я сделаю это для неактивных форм (любых вкладок, которые в данный момент не отображаются), я получаю черный экран в области памяти или даже получаю «копию» экрана, расположенного над ним. Если я сделаю это для форм, которые больше не видны, у меня также будет черный экран.

Что мне делать, чтобы получить растровое изображение этих скрытых форм? Придется ли мне прибегать к кешированию или есть еще какие-то уловки? Я не могу использовать функцию Winforms DrawToBitmap (), потому что формы содержат некоторые низкоуровневые графические элементы, которые нельзя получить с их помощью. Как я могу использовать winapi для получения растрового изображения DC этих "скрытых" форм?


person buddhabrot    schedule 14.11.2011    source источник
comment
На ваш точный вопрос нет простого ответа. Что именно вам нужно нарисовать? Содержание, полная форма, ...   -  person John Arlen    schedule 16.11.2011
comment
См. Мой собственный ответ ниже. Я, кстати, не согласен с тем, что характер показываемого содержания имеет какое-либо значение.   -  person buddhabrot    schedule 16.11.2011


Ответы (1)


Мне удалось это сделать с помощью API PrintWindow в user32.dll. Он решает проблему с вкладками MDI, но не решает проблему со скрытыми формами. Я решил эту проблему, ненадолго показав формы за пределами экрана. Кажется, что «окончательный» способ - использовать (недокументированный) dwm.dll, но это не рекомендуется, потому что интерфейсы в разных версиях Windows различаются.

person buddhabrot    schedule 16.11.2011