PDA

Просмотр полной версии : Рисование с помощью WinAPI


Truman
04.09.2010, 19:58
Есть проект на с++, без mfc (не люблю я его).

Есть задача: создать некий объект на форме (в моем случае диалоговое окно) который бы служил "графическим дисплеем", на котором можно рисовать примитивы и выводить изображения.
Фактически аналог волкеровской "Map".

С устройством DC знаком и использую.
Но немного в ступоре.

Кто-то знаком каким образом строится волкеровское отображения карты?
Там ведь на обычном Api написано.
Мне интересная общая схема взаимодействия.

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

Кто делал "вьюпорты", дайте совет. :)

Добавлено через 1 час 0 минут
И сразу, заодно: GDI или GDI+ ? :)

xkor
04.09.2010, 20:37
всеравно не достигаю той "идеальной" картинки, что выходит у волкера, даже с использованием второстепенной буферизациипо каким параметрам не достигаешь?)
рисуешь надеюсь сначала в буфере?
ЗЫ а вообще рисовать лучше с помощью какого нить стороннего решения, GDI и GDI+ довольно тормознутые, и расчитаны на рисование интерфейса обычного приложения с небольшими рюшечками, карты типа валкеровской ими медленно рисуются...

ЗЗЫ а хотя я тут подумал, ты про объекты на карте или саму карту-ландшафт?, если про ландшафт который при масштабировании курочиться то можно просто на канве на которой рисуешь включить сглаживание, только не помню как и кода под рукой нет

ЗЗЗЫ GDI+ просто даёт больше красивостей и эффектов по сравнению с GDI

Truman
04.09.2010, 20:50
Угу, в буфер, после чего копирую содержимое через BitBtl в нужную область.

Но иногда, все же происходят мерцания картинки.
Уверен, что из-за непродуманного мною использования функции InvalidateRect. Но пока так и не нашел красивого решения. =)

Добавлено через 2 минуты
Наткнулся на парочку интересных ссылок, изучаю.

GDI+: графика нового поколения - Часть 1. Краткое знакомство (http://www.rsdn.ru/article/gdi/gdiplus1.xml)
GDI+: графика нового поколения - Часть2. Работа с растрами и графическими файлами (http://www.rsdn.ru/article/gdi/gdiplus2mag.xml)
GDI+: графика нового поколения - Часть 3. Построение векторных изображений (http://www.rsdn.ru/article/gdi/gdiplus3.xml)

mira
04.09.2010, 23:51
по каким параметрам не достигаешь?)
рисуешь надеюсь сначала в буфере?
ЗЫ а вообще рисовать лучше с помощью какого нить стороннего решения, GDI и GDI+ довольно тормознутые, и расчитаны на рисование интерфейса обычного приложения с небольшими рюшечками, карты типа валкеровской ими медленно рисуются...

ЗЗЫ а хотя я тут подумал, ты про объекты на карте или саму карту-ландшафт?, если про ландшафт который при масштабировании курочиться то можно просто на канве на которой рисуешь включить сглаживание, только не помню как и кода под рукой нет

ЗЗЗЫ GDI+ просто даёт больше красивостей и эффектов по сравнению с GDI

че там блитнуть карту и нарисовать пару десятков квадратиков и текста.
GDI легко потащит.
да.. если верно помню класс окна должен быть создан с
WNDCLASS.hbrBackground = 0; чтобы при каждом инвалидате не перерисоввывать бакграунд, иначе будет мерцание)))

Truman
05.09.2010, 18:01
да.. если верно помню класс окна должен быть создан с
WNDCLASS.hbrBackground = 0; чтобы при каждом инвалидате не перерисоввывать бакграунд, иначе будет мерцание)))
Вот! Упустил эту штучку. Спасибо.

Вообщем построил простой примерчик для себя, и вроде он пока реализует необходимые требования.

Обновление области (как и изменения объектов, хотя в рабочем примере данные будут браться из совсем других уже сформированных массивов) сделал по таймеру, каждые 100 мс. Примерно 10 кадр.\с.

Выкладываю тестовик, может быть кому интересно будет.

Желающие могут раскритиковать и поправить.

З.Ы. Подключил к этому делу GDI+, удобный он. :)

1486