Вернуться   CoderX :: Forums > Основные форумы > Программинг
Войти через OpenID

Программинг Форум для тем связанных с программированием

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 04.09.2010, 19:58   #1
Новичок
 
Аватар для Truman
 
Регистрация: 11.04.2009
Сообщений: 24
Сказал Спасибо: 2
Имеет 12 спасибок в 9 сообщенях
Truman пока неопределено
По умолчанию Рисование с помощью WinAPI

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

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

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

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

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

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

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

Последний раз редактировалось Truman, 04.09.2010 в 19:58. Причина: Добавлено сообщение
Truman вне форума   Ответить с цитированием
Старый 04.09.2010, 20:37   #2
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

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

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

ЗЗЗЫ GDI+ просто даёт больше красивостей и эффектов по сравнению с GDI
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
Старый 04.09.2010, 20:50   #3
Новичок
 
Аватар для Truman
 
Регистрация: 11.04.2009
Сообщений: 24
Сказал Спасибо: 2
Имеет 12 спасибок в 9 сообщенях
Truman пока неопределено
По умолчанию

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

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

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

GDI+: графика нового поколения - Часть 1. Краткое знакомство
GDI+: графика нового поколения - Часть2. Работа с растрами и графическими файлами
GDI+: графика нового поколения - Часть 3. Построение векторных изображений

Последний раз редактировалось Truman, 04.09.2010 в 20:50. Причина: Добавлено сообщение
Truman вне форума   Ответить с цитированием
Старый 04.09.2010, 23:51   #4
Местный
 
Регистрация: 10.08.2010
Сообщений: 634
Сказал Спасибо: 22
Имеет 95 спасибок в 70 сообщенях
mira пока неопределено
По умолчанию

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

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

ЗЗЗЫ GDI+ просто даёт больше красивостей и эффектов по сравнению с GDI
че там блитнуть карту и нарисовать пару десятков квадратиков и текста.
GDI легко потащит.
да.. если верно помню класс окна должен быть создан с
WNDCLASS.hbrBackground = 0; чтобы при каждом инвалидате не перерисоввывать бакграунд, иначе будет мерцание)))
mira вне форума   Ответить с цитированием
Старый 05.09.2010, 18:01   #5
Новичок
 
Аватар для Truman
 
Регистрация: 11.04.2009
Сообщений: 24
Сказал Спасибо: 2
Имеет 12 спасибок в 9 сообщенях
Truman пока неопределено
По умолчанию

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

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

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

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

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

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

Test2.rar
Truman вне форума   Ответить с цитированием
За это сообщение Truman нажился спасибкой от:
Ответ

  CoderX :: Forums > Основные форумы > Программинг



Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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

vBulletin style designed by MSC Team.
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Locations of visitors to this page
Rambler's Top100

Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!