![]() |
Модераторы: Rickert, Alexeis, BorisVorontsov |
![]() ![]() ![]() |
|
serg405 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 118 Регистрация: 12.6.2008 Репутация: нет Всего: нет |
Привет учасникам форума.
У меня такая задача, нужно написать свой LictCtrl который стилизируется(цвет текста, настраемый фонт, цвет фона и тд и тп). Сам контрол должен отображать большое количество даных. Я всё ето писал на GDI и у меня была проблема с перерисовкой (никак не мог избавится от мерцания). И так вопрос. Есть ли в DirectX поддержка стандартных контролов Windows. Если да, то можна какието ссылки, как с етим работать. Если нет, как мне ето сделать (какими технологиями). |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 5 Всего: 459 |
Решается двойной буферизацией. Создается битмап, при получении WM_PAINT рисуем на нем, затем его рисуем целиком при помощи BitBlt. Всякие там директиксы только усложнят все. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
serg405 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 118 Регистрация: 12.6.2008 Репутация: нет Всего: нет |
но если использовать BitBlt , код будет использовать много процессорных ресурсов, поскольку обрабативается очень большое количество битов.
|
|||
|
||||
Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: нет Всего: 32 |
serg405, ты считаешь, что сможешь сэкономить на дайректикс? Все используют двойную буферезацию, включая стандартные контролы винды. Операция копирования битмапа - это очень простой процесс, не требующий много ресурсов.
-------------------- ![]() |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 5 Всего: 459 |
Как правило эта операция делается драйвером видеокарты, поэтому выполняется достаточно эффективно. Конечно же FastBlt из DirectDraw затратит раз в 10 меньше ресурсов, но все таки тут не кино где 25 кадров в секунду. Обычно BitBlt хватает на весьма средненькой машине. На компах выпущенных до 2000 года, действительно могут быть быть проблемы с ресурсами на такого рода задачах. Кстати еще вариант, сделать форму полупрозрачной с коэффициентом полупрозрачности 255, т.е. непрозрачной, тогда включиться виндовая двойная буферизация, но это будет тормознее чем свой bitblt. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Mad |
|
|||
Опытный ![]() ![]() Профиль Группа: Эксперт Сообщений: 656 Регистрация: 18.10.2004 Где: Одесса Репутация: нет Всего: 19 |
кроме оработки WM_PAINT надо еще перехатывать WM_ERASEBKGND и WM_NOTIFY (во многих случаях достаточно обрабатывать только WM_NOTIFY), тогда можно решить проблему с мерцанием, + в коде обработки сообщений надо анализировать РЕГИОН ОБНОВЛЕНИЯ (функция GetUpdateRgn), это повысит производительность. Это сообщение отредактировал(а) Mad - 7.8.2009, 17:27 |
|||
|
||||
![]() ![]() ![]() |
Вы можете найти полезным что... | |
|
|
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |