Нарисуйте OpenGL на рабочем столе Windows без окна - PullRequest
6 голосов
/ 29 мая 2010

Я видел такие вещи, и мне было интересно, возможно ли это, скажем, я запустил свое приложение и он покажет рендер на том, что находится под ним.

Так что в основном рендеринг на экране без окна.

Возможно или ложь?

Примечание: хотите сделать это в Windows и в C ++.

Ответы [ 3 ]

4 голосов
/ 29 мая 2010

Можно использовать ваше приложение для рисования на окнах других приложений. Как только вы нашли нужное окно, у вас есть HWND, вы можете использовать его так же, как это было ваше собственное окно для рисования. Но так как это окно не знает, что вы сделали это, оно, вероятно, испортит все, что вы на нем нарисовали, когда попытается перерисовать себя.

Есть несколько очень сложных способов обойти это, некоторые из них включают использование оконных "хуков" для перехвата рисования сообщений в этом окне, чтобы вы знали, когда оно было перерисовано, чтобы вы могли также выполнить перерисовку.

Другой вариант - использовать области отсечения в окне. Это может позволить вам придать окну необычную форму, и все, что находится за ним, будет выглядеть правильно.

Есть также способы взять на себя рисование фонового окна рабочего стола, и вы действительно можете запустить приложение, которое рисует анимацию и прочее на заднем плане рабочего стола (пока рабочий стол еще можно использовать). По крайней мере, это было возможно до XP, не уверен, изменилось ли это в Vista / Win7.

К сожалению, все эти опции слишком сложны, чтобы углубляться в них без дополнительной информации о том, что вы пытаетесь сделать.

1 голос
/ 29 мая 2010

Вы можете использовать GetDesktopWindow () , чтобы получить HWND рабочего стола. Но, как сказано в предыдущем ответе (SoapBox), будьте осторожны, вы можете испортить рабочий стол, потому что ОС ожидает, что она ему принадлежит.

0 голосов
/ 20 декабря 2011

Я написал проект с открытым исходным кодом несколько лет назад, чтобы добиться этого на фоне рабочего стола. Это называется Uberdash. Если вы следуете иерархии окон, рабочий стол - это просто окно в своего рода «фоновом» контейнере. Тогда есть основной контейнер и передний контейнер. Фронтальный контейнер - это то, как окна становятся полноэкранными или «всегда сверху». Вы можете использовать композицию Aero для рендеринга окна с альфа-каналом в переднем контейнере, но вам нужно будет передавать события в нижние окна. Это не будет красиво.

Кроме того, в некоторых видеокартах есть технология, называемая наложением / подложкой. Раньше вы могли рендерить прямо на оверлей. Ваш графический процессор будет применять его напрямую, без вмешательства в основную память. Таким образом, даже если вы сделали снимок экрана, ваш оверлей / подложка не будет отображаться в шапке экрана. К сожалению, MS запретила эту технологию в Vista ...

...