Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > ListCtrl


Автор: serg405 5.8.2009, 18:40
Привет учасникам форума.

У меня такая задача, нужно написать свой LictCtrl который стилизируется(цвет текста, настраемый фонт, цвет фона  и тд и тп).
Сам контрол должен отображать большое количество даных.
 Я всё ето писал на GDI и у меня была проблема с перерисовкой (никак не мог избавится от мерцания).
И так вопрос.

Есть ли в DirectX поддержка стандартных контролов Windows. 
Если да, то можна какието ссылки, как с етим работать.
Если нет, как мне ето сделать (какими технологиями).

Автор: Alexeis 5.8.2009, 20:10
Цитата(serg405 @  5.8.2009,  17:40 Найти цитируемый пост)
 Я всё ето писал на GDI и у меня была проблема с перерисовкой (никак не мог избавится от мерцания).

  Решается двойной буферизацией. Создается битмап, при получении WM_PAINT рисуем на нем, затем его рисуем целиком при помощи BitBlt.

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

Автор: serg405 5.8.2009, 20:44
но если использовать BitBlt , код будет использовать много процессорных ресурсов, поскольку обрабативается очень большое количество битов.

Автор: Cheloveck 5.8.2009, 20:51
serg405, ты считаешь, что сможешь сэкономить на дайректикс? Все используют двойную буферезацию, включая стандартные контролы винды. Операция копирования битмапа - это очень простой процесс, не требующий много ресурсов.

Автор: Alexeis 5.8.2009, 21:12
Цитата(Cheloveck @  5.8.2009,  19:51 Найти цитируемый пост)
Операция копирования битмапа - это очень простой процесс, не требующий много ресурсов. 

  Как правило эта операция делается драйвером видеокарты, поэтому выполняется достаточно эффективно. Конечно же FastBlt из DirectDraw затратит раз в 10 меньше ресурсов, но все таки тут не кино где 25 кадров в секунду. Обычно BitBlt хватает на весьма средненькой машине. На компах выпущенных до 2000 года, действительно могут быть быть проблемы с ресурсами на такого рода задачах. 
  
  Кстати еще вариант, сделать форму полупрозрачной с коэффициентом полупрозрачности 255, т.е. непрозрачной, тогда включиться виндовая двойная буферизация, но это будет тормознее чем свой bitblt.

Автор: Mad 7.8.2009, 17:23
Цитата(serg405 @  5.8.2009,  17:40 Найти цитируемый пост)
Я всё ето писал на GDI и у меня была проблема с перерисовкой (никак не мог избавится от мерцания).

кроме оработки WM_PAINT надо еще перехатывать WM_ERASEBKGND и WM_NOTIFY (во многих случаях достаточно обрабатывать только WM_NOTIFY), тогда можно решить проблему с мерцанием, + в коде обработки сообщений надо анализировать РЕГИОН ОБНОВЛЕНИЯ (функция GetUpdateRgn), это повысит производительность.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)