Что такое надежный метод для захвата экрана дочернего окна в Windows 7? - PullRequest
0 голосов
/ 28 января 2010

Простите мое разочарование.Я спрашивал об этом во многих местах, и я серьезно не думаю, что в Windows 7 SDK не было бы способа достичь этого.

Все, что я хочу, это захватить часть «ребенка»window '(setParent ()), созданный родителем.Раньше я делал это с помощью bitblt (), но суть в том, что дочернее окно может быть приложением любого типа, и в моем случае в его разделе работает OpenGL.Если я выполняю bitblt (), то часть OGL становится пустой и не записывается в BMP.

DWM, в частности dwmRegisterThumbnail () не позволяет создавать эскизы дочерних окон.Поэтому, пожалуйста, дайте мне направление.

Спасибо.

Ответы [ 4 ]

1 голос
/ 31 марта 2010

Я предлагаю вам:

  1. Забудьте миниатюрную часть задания (с точки зрения захвата).
  2. Рассчитайте, где находится ваше окно.
  3. Захват во весь экран.
  4. Акцизный участок, который вас интересует (используя данные из шага 2).
  5. Масштабируется до соответствующего размера миниатюры.

Извините, это больше работы, но она должна работать, что лучше, чем у вас сейчас.

1 голос
/ 29 января 2010

Прошло много времени с тех пор, как я это сделал, поэтому мое объяснение может быть немного расплывчатым, но насколько я помню, Windows не "видит" OpenGL, отображаемый внутри окна.

Что Windows делает, так это создает окно с указанным размером, а затем «передает его» OpenGL для рендеринга. Это означает, что вы не можете получить пиксели, отображаемые со стороны Windows кода.

Когда мы хотели запечатлеть 3D, нам нужно было повторно визуализировать экран, чтобы вывести его на экран, который затем был сохранен (или напечатан).

Очевидно, что весь снимок экрана (Print Screen) работает, потому что он читает последние пиксели.

0 голосов
/ 29 января 2010

У меня нет доступа к исходному коду любого дочернего окна, которое может быть открыто, включая окно с OpenGL

0 голосов
...