Полноэкранный оверлей DirectX?Да .. опять C # - PullRequest
16 голосов
/ 23 августа 2010

Похоже, что этот вопрос задавался несколько раз каждый в своем контексте, и я сделал несколько шагов в создании оверлея для игры (это для информационных данных и т. Д.).Я также хотел бы сделать его совместимым, как Steam и XFire.

Мне удалось получить оверлей для игры Directx, пока она в оконном режиме ... вроде.

Я просмотрел переполнение стека и Google без особой удачи.

При необходимости я могу попробовать это на C ++ вместо C #.Я знаю C #, но я ни в коем случае не считаю себя профессионалом.Просто нужно лучшее объяснение.Черт возьми, я буду готов собрать хороший скринкаст / учебник, если я смогу сделать это правильно.

ПРИМЕЧАНИЕ. Я действительно хотел бы сделать это с собственным кодом, а не с библиотекой, но если есть хорошая бесплатная библиотека, я хотел бы проверить это.

Примеры: Как наложить графику на игры для Windows?

http://www.gamedev.net/community/forums/topic.asp?topic%5Fid=359794

C # «Привязать» форму наложения к позициидругого окна

Подробнее: Мне удалось получить форму окна для наложения окна игры и установить его родительский с SetParent.Это, однако, не очень хорошо работает, потому что оно не будет работать в полноэкранном режиме и прозрачность не работает.(в основном имел ключ прозрачности и TopMost был установлен в TRUE.) Я действительно хотел бы найти другой метод.

Ответы [ 2 ]

2 голосов
/ 28 ноября 2010

Я делал это в Delphi несколько лет назад.Единственными вариантами на тот момент было ввести в процесс встроенную DLL-библиотеку Win32, процесс вызывал бы мои функции DLL DirectDraw, а остальное я бы передавал в реальный DirectDraw.Это был единственный способ гарантировать, что он будет работать, если программа переключится в полноэкранный режим из / в оконный режим.Моя DLL создаст общее файловое пространство в памяти для связи между ним и моей программой.

Причина, по которой я это сделал, заключалась в том, чтобы писать в игру людей, говорящих на TeamSpeak или Ventrilo.1004 * Однако, этот метод невозможен с объектами среды CLR.Ваш единственный вариант - заглянуть в C ++ Native DLL Injectrion / Wrapping.

0 голосов
/ 27 августа 2010

Я предлагаю использовать метод RenderToSurface библиотеки DirectShow. В нем есть почти все, что вы ищете. (Рисование поверхности DirectX).

http://www.experts -exchange.com / Программирование / Game_Development / Game_Graphics / DirectX / Q_20410452.html (один пример)

http://msdn.microsoft.com/en-us/magazine/cc164112.aspx

...