PCCar.ru - Ваш автомобильный компьютер

PCCar.ru - Ваш автомобильный компьютер (http://pccar.ru/index.php)
-   Разработка программ (http://pccar.ru/forumdisplay.php?f=27)
-   -   Интересная задачка :-) DirectDraw (http://pccar.ru/showthread.php?t=14529)

CyberSubaru 06.03.2011 19:26

Интересная задачка :-) DirectDraw
 
Есть программа. Точнее 2 программы. Они обе рисовали через GDI. Одна все время, другая иногда показывала свое окно и тоже там рисовала.
Основную программу переложил в DirectDraw, полноэкранный режим. Теперь показать окно другой программы стало весьма проблематчино.
Как рисовать на сурфейсах созданного в экзешнике DirectDraw из длл это понятно. А вот как такое сделать из другого экзешника?
Т.е. как из одного экзешника рисовать на сурфейсах в другом экзешнике?
Никто таким не заморачивался?

Virtual 06.03.2011 20:41

хм....
попробуй начать с получения извне, handle окна куда ты DirectDraw засадил....
рисование в обычных окнах таким макаром прокатывало :).... но имхо хлопотно это :)
проще:
а. обьеденить проги....
если нет возможности то
б. пусть основная прога где фуллскрин.... перехватывает появление чужего окошка и сама его изображение себе в область DirectDraw отрисовывает ;)
(скриншот чужего окна через PrintWindow мона получить ;))

awtoap 06.03.2011 20:49

Все элементарно...передавайте из второстепенной проги в основную запрос на выдачу ссылки на интерфейс DirectDraw через оконную функцию(через сообщения винды). Потом с этим интерфейсом работаете также как и из основной проги. Или второй вариант пишите DLLку в которой реализован движок вывода и там с помощью функции так же получаете интерфейс. Эту DLL будут юзать основная и второстепенные проги (аля плагины).

CyberSubaru 07.03.2011 03:53

Цитата:

Сообщение от Virtual (Сообщение 176034)
хм....
попробуй начать с получения извне, handle окна куда ты DirectDraw засадил....
рисование в обычных окнах таким макаром прокатывало :).... но имхо хлопотно это :)
проще:
а. обьеденить проги....
если нет возможности то
б. пусть основная прога где фуллскрин.... перехватывает появление чужего окошка и сама его изображение себе в область DirectDraw отрисовывает ;)
(скриншот чужего окна через PrintWindow мона получить ;))

Какой еще handle окна? :-) ДиректДро рисует напрямую в видеопамять вне зависимости где расположено окно, соотвественно перекрывая результаты всех GDI функций. Делать цикл поиска окна как бы не вариант....

Цитата:

Сообщение от awtoap (Сообщение 176035)
Все элементарно...передавайте из второстепенной проги в основную запрос на выдачу ссылки на интерфейс DirectDraw через оконную функцию(через сообщения винды). Потом с этим интерфейсом работаете также как и из основной проги. Или второй вариант пишите DLLку в которой реализован движок вывода и там с помощью функции так же получаете интерфейс. Эту DLL будут юзать основная и второстепенные проги (аля плагины).

wm_copydata. Знаю. Только один нюанс. Адресные пространства разных процессов разные и во втором процессе указатель на интерфейс, объявленный в первом процессе, будет ссылаться в никуда. Тоже самое с длл, подгружаемой из разных процессов.

CyberSubaru 07.03.2011 04:33

Важно то, что программы должны работать раздельно. Впринципе есть идейка.

Virtual 07.03.2011 09:20

ну раз обе проги твои, то самое логичное это придумать какой либо апи по обмену данными, а рисовать из двух мест это как одеяло перетягивать :).

CyberSubaru 07.03.2011 19:40

Я ж грю - есть идея как это реализовать. Ток как правило сначала надеешься, что кто-то уже делал подобный ход и есть где слизать :-)))))

Virtual 07.03.2011 21:30

сколько подобных задачек возникало.... всегда приходил к выводу что надежней пробрасывать исходные данные.... иль через сообщения иль пайпами... а гуем пусть занимется кто-то один :).... кстати такой подход когда источник данных отдельно а гуй отдельно....приводит к универсальности ;).... нужен гуй пожалуйсто.... не нужен ну и фиг с ним :). (вроде гдет валялись наработки с подобной задачкой.... сервис и гуй к нему отдельный.)

CyberSubaru 08.03.2011 05:14

Плагины то у меня сами рисуют))) Ибо там проще! Передаешь указатель на сурфейс и рисуй! ))

CyberSubaru 02.04.2011 06:23

Перешел на D3D :-)


Часовой пояс GMT +4, время: 01:58.

Работает на vBulletin® версия 3.8.4.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot