Fullscreen DirectX Overlay? Да.. снова С#
Похоже, что этот вопрос задавался несколько раз в разных контекстах, и я сделал некоторые шаги для создания наложения для игры (это для информационных данных и т.д.). Я также хотел бы сделать его взаимозаменяемым, как Steam и XFire.
Мне удалось получить наложение для игры directx, в то время как в режиме окна... kinda.
Я просмотрел переполнение стека и google без большой удачи.
При необходимости я могу попробовать это на С++ вместо С#. Я знаю С#, но я не считаю себя профессионалом. Просто нужно лучшее объяснение. Черт возьми, я буду готов составить хороший скринкаст/учебник, если я смогу добиться этого.
ПРИМЕЧАНИЕ. Мне бы очень хотелось сделать это с помощью собственного кода, а не библиотеки, но если есть хорошая бесплатная библиотека, я бы хотел его проверить.
Примеры:
Как накладывать графику на игры Windows?
http://www.gamedev.net/community/forums/topic.asp?topic%5Fid=359794
С# "Lock" оверлейная форма к позиции другого окна
Дополнительная информация:
Мне удалось получить форму окна, чтобы наложить игровое окно и установить его родительский элемент с помощью SetParent. Это, однако, не очень хорошо работает, потому что оно вообще не работает в полноэкранном режиме, а прозрачность не работает. (в основном был ключ прозрачности, а TopMost - TRUE).
Мне бы очень хотелось найти другой метод.
Ответы
Ответ 1
Я делал это в Delphi несколько лет назад. Единственными параметрами в то время было внедрение Inactive Native Win32 DLL в процесс, процесс вызвал бы мои DLL-функции DirectDraw, и я бы проксировал остальную часть в реальном DirectDraw. Это был единственный способ гарантировать, что он будет работать, если программа переключится в полноэкранный режим на/из окон. Моя DLL создаст совместное файловое пространство в памяти для обмена данными между ним и моей программой.
Причина, по которой я делал это, заключалась в том, чтобы написать в игре лиц, которые выступают в TeamSpeak или Ventrilo.
Однако этот метод невозможен с объектами среды CLR. Ваш единственный вариант - посмотреть в CML-версию Native DLL Injectrion/Wrapping.
Ответ 2
Я предлагаю использовать метод RenderToSurface библиотеки DirectShow. У него есть почти все, что вы ищете. (DirectX Surface Drawing).
http://www.experts-exchange.com/Programming/Game_Development/Game_Graphics/DirectX/Q_20410452.html (один пример)
http://msdn.microsoft.com/en-us/magazine/cc164112.aspx