NoX World - форум об игре NoX

Всё остальное => Прочее => Тема начата: Lаrboss от 28/02/2011 03:35:20

Название: Программирование. Вывод изображения поверх всего на экране.
Отправлено: Lаrboss от 28/02/2011 03:35:20
Рою интернет и не могу найти ответ на этот вопрос. Хотя в интернете этот вопрос задавали не однократно, но решения нету.
Проблема не в самом рисование поверх всего, что на экране, а в том, что это все затирается при изменениях.
Может быть кто-то подскажет как это реализовать или даст ссылку?
Работаю в Делфи. Но буду рад примеру кода на любом языке программирования.
Название: Программирование. Вывод изображения поверх всего на экране.
Отправлено: pss88 от 28/02/2011 07:47:38
Ммм... сделать окно на весь экран. Сделать его прозрачным, кроме тех мест, где будешь рисовать. Сделать, чтобы было поверх всех окон и чтобы не брало фокус )))
Название: Программирование. Вывод изображения поверх всего на экране.
Отправлено: TheSim от 28/02/2011 11:00:30
Затиралось и будет затираться.
Поскольку прозрачное окно тебе не подойдет - будет прозрачно везде - используй РЕГИОНЫ чтобы вырезать окно по форме того, что хочешь нарисовать.


Название: Программирование. Вывод изображения поверх всего на экране.
Отправлено: Lаrboss от 28/02/2011 12:59:05
Т.е. Рисование делать надо на форме, а саму форму сделать поверх всего?
Название: Программирование. Вывод изображения поверх всего на экране.
Отправлено: pss88 от 28/02/2011 15:12:49
Ну да - первое, что пришло в голову))) А ты рисовал на экране? (Device Context = 0)
Название: Программирование. Вывод изображения поверх всего на экране.
Отправлено: Lаrboss от 28/02/2011 17:11:12
Ну да - первое, что пришло в голову))) А ты рисовал на экране? (Device Context = 0)
Конечно рисовал, если в таймер вставить рисование то получается нормально, но мне надо чтоб в игре также выводилось стабильно, без мерцания.
Название: Программирование. Вывод изображения поверх всего на экране.
Отправлено: TheSim от 28/02/2011 17:51:31
грм, без мерцания говоришь.... сложновато - я бы просто внедрялся. Например можно эвент сделать.
т.е. твоя прога ждет эвент когда начинать рисовать, а та прога, чье окно ты ловишь - посылает эвент когда свое нарисует.
для этого надо
DuplicateHandle + VirtualAllocEx + WriteProcessMemory

и код какой-нить засунуть вроде
BOOL WINAPI (*SetEventPtr)(
  __in  HANDLE hEvent
);
VOID WINAPI (*SleepPtr)(
  __in  DWORD dwMilliseconds
);

HANDLE Event;
void SomeCallBack() {
SetEventPtr(Event);
SleepPtr(0);
}
  для этого понадобится порядка 30 байт забросить.
Название: Программирование. Вывод изображения поверх всего на экране.
Отправлено: Lаrboss от 28/02/2011 18:48:40
Если говорить конкретно, то я хочу в ноксе вывести текст (для начала) в самой игре. Проблем с выводом не посредственно нет - могу вывести даже растровый рисунок в игре. Однако возникает эффекта мерцания, из-за того, что после вывода моей графики, она затирается графикой нокса, т.к. экран постоянно обновляется. То, что у меня получилось можно посмотреть в ноксменеджере  - вывод хп и мп в игре.


Ведь есть же программы, которые умею рисовать внутри полноэкранного приложения, steam, к примеру выводит мессенджер внутри игры и все шикарно.


Твой способ попробую. Спасибо.
Название: Программирование. Вывод изображения поверх всего на экране.
Отправлено: TheSim от 28/02/2011 22:00:32
Стим выводит т.к. интегрируется в игру со стимом как правило.

Я не уверен что стим умеет выводить графику в ПРОИЗВОЛЬНУЮ игру - т.е. если ты запустишь стим и нокс и тебе напишут какую нить хрень в стиме мерцать не будет?

Если надо - могу более детально подготовить код для заброски и подсказать куда его забрасывать