| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 директдрава? тогда можно будет смело в бэк буфере дорисовать че угодно а потом флип сделать |
| Автор: DENNN 22.10.2003, 16:20 |
| Ага, а если там OpenGL? |
| Автор: Nastya 22.10.2003, 17:41 |
| Не увенрена, а если диалоговое окно созадать как системное модальное ? |
| Автор: man2002ua 22.10.2003, 17:47 | ||
Есть такая программа Fraps - она занимается именно этим - перехватывает операции типа swapBuffer (OpenGL), BitBlt и т.п. и выводин в углу игрушки фрейм/сек. Перехват вызовов можно сделать как угодно, на форуме это обсуждалось много раз. |
| Автор: Dragon 22.10.2003, 21:39 |
| Вот явный пример - в Flash Get корзина закачек всегда выводится поверх всех игр (OpenGL, DirectX) и даже не мигает. А ещё видел плагин к Winamp который держит своё окно поверх всех. Ну и не следует забывать всякие шелы в компьютерных клубах - они методично выводят своё окно с просьбой доплатить |
| Автор: knave 23.10.2003, 11:59 |
| Тогда надо поискать как это делать |
| Автор: Baa 23.10.2003, 18:43 |
| Кто-то чего говорил про прямое отображение в память? Гы |
| Автор: 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 покажи |
| Автор: 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 |
| Хотя наверняка как том ожно выводить |
| Автор: Baa 6.11.2003, 05:32 |
| А вот стили окна, которое поверх игрушек рисуется 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 |