Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Как создать окна поверх игрушек ?


Автор: Dragon 21.10.2003, 22:16
Мне нужно, что бы моё окно оставалось всегда поверх любого приложения и не перекрывалось ничем.
Попробывал вызывать SetWindowPos() с параметром TOPMOST по таймеру но появилась другая проблема - моя программа при запуске сначала сворачивает всех на панель задач, выводит окно, и всё. Как сделать, чтоб она никого никуда не скручивала при запуске? Или кто знает как по-другому выводить окна поверх игр.

Автор: knave 22.10.2003, 11:36
Это просто сокнами несделать. Так как в играх используется приямой вывод в видеопямять, а окно нужно тольок для того что бы указать координаты. Если хочеш что то вывдить то тебе нужно выводить на HDC вырхнего окна. Но в играх это будет моргать. Вообще думаю что бы неморгало стороняя программы нарисовать несможет. Там ж все изоражение строится в буфере, следоватеьно твое должно быть выведено самым последним, что бы быть поверх всего. А как ты узнаеш что кадр у игры уже отрисовался и гтов в выводу.

Автор: knave 22.10.2003, 11:38
может конечно я инеправ. Иногда я видел диалоговые окна системные которые вылетали на экран и несворачивали игру.

Автор: oleg1973 22.10.2003, 16:17
а если какнить перехватить функ flip директдрава?smile.gif
тогда можно будет смело в бэк буфере дорисовать че угодно а потом флип сделать smile.gif

Автор: DENNN 22.10.2003, 16:20
Ага, а если там OpenGL?

Автор: Nastya 22.10.2003, 17:41
Не увенрена, а если диалоговое окно созадать как системное модальное ?

Автор: man2002ua 22.10.2003, 17:47
Цитата
а если какнить перехватить функ flip директдрава?


Есть такая программа Fraps - она занимается именно этим - перехватывает операции типа swapBuffer (OpenGL), BitBlt и т.п. и выводин в углу игрушки фрейм/сек.
Перехват вызовов можно сделать как угодно, на форуме это обсуждалось много раз.

Автор: Dragon 22.10.2003, 21:39
Вот явный пример - в Flash Get корзина закачек всегда выводится поверх всех игр (OpenGL, DirectX)
и даже не мигает. А ещё видел плагин к Winamp который держит своё окно поверх всех. Ну и не следует забывать всякие шелы в компьютерных клубах - они методично выводят своё окно с просьбой доплатить smile.gif

Автор: knave 23.10.2003, 11:59
Тогда надо поискать как это делать

Автор: Baa 23.10.2003, 18:43
Кто-то чего говорил про прямое отображение в память? Гы smile.gif игры ведь и в окне идти умеют... игра - это и есть обычное окно...

Автор: oleg1973 23.10.2003, 18:47
Baa
ну немнога не согласен
в случае с директдрав если я делаю
comcall DDraw,SetCooperativeLevel,\
[hwd],DDSCL_EXCLUSIVE+DDSCL_FULLSCREEN
то могу потом рисовать непосредственно в LFB напрямую без заморочек
mov [edi],eax к примеру
быстро и надежно


Автор: knave 24.10.2003, 13:02
да согласен с предыдущим - игра даже когда идет в окне (D3D или DD), то окно всеголищ используется для определения координат в видиопамяти, а вывож происходт напрямую. Этот Эффект можно наблюдать если игру в окне запустить и поводить это окно по экрану. Сожержимопе окна будет черным, а заним будет следовать окно с изображением текущего кадра игры. Одним словом в каждой игре может быть настроено коно по разному и самый верный вариант это перехватывать смену буферов и рисовать внем непосредственно перед тем как он будет выведен

Автор: Baa 24.10.2003, 22:55
Дык какая разница про напрямую-то? я легко могу повесить окно винды над окном игры... без проблем... вот я к чему вел.

Автор: oleg1973 25.10.2003, 01:44
Baa
покажи smile.gif

Автор: Baa 25.10.2003, 17:28
У мя ща проблемы с выкладыванием в инет, но последовательность могу описать... запустил ку2, загрузил q2dm1 (карта), нажал alt+enter, он перешел в оконный режим, дальше нажал ctrl+esc, появился task manager поверх окна игрушки... никаких проблем.

Автор: mr.DUDA 25.10.2003, 20:39
Мне кажется, если найти главное окно D3D/GL-приложения и субклассировать его на свой оконный класс (получится фильтр сообщений), то можно после вызова WM_PAINT-обработчика игрушки вызвать свой WM_PAINT.

Вроде, все директы/ГЛы рисуют не "абы-куда", а в контекст вывода. Поэтому и должно сработать.

Автор: knave 27.10.2003, 10:51
так с это ене вовсех играх прокатывает, все завист от режима настройки DD. У меня в одних такое прокатывало а в других нет

Автор: knave 27.10.2003, 10:51
Хотя наверняка как том ожно выводить smile.gif

Автор: Baa 6.11.2003, 05:32
А вот стили окна, которое поверх игрушек рисуется smile.gif
Window Styles:
WS_POPUP
WS_VISIBLE
WS_CLIPSIBLINGS

Extended Styles:
WS_EX_LEFT
WS_EX_LTRREADING
WS_EX_RIGHTSCROLLBAR
WS_EX_TOPMOST
WS_EX_TOOLWINDOW
WS_EX_LAYERED

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)