Chertenok.ru - все о программировании
Вход  |  Регистрация  |  Поиск 
Праздник
Завтра :

День славянской письменности и культуры


TrackBar


Новая тема  Ответить  Печать Предыдущая тема  Следующая тема
Автор Сообщение
Андрей
Гость







СообщениеВт, 01-Июл-2003 11:19    Заголовок сообщения: TrackBar
Цитата

Здравствуйте! Проблема такая: необходимо перерисовать TrackBar. Когда я перехватываю сообщение WM_PAINT происходит мерцание :( . LockWindowsUpdate этому не помогает, хотя я работаю с HDC - что гораздо быстрее, чем с Canvas.
TrackBar создаю так: ctrl_track1 := CreateWindowEx(... ); Как перерисовывать стандартные объекты (BUTTON, STATIC, COMBOBOX) я знаю. Заранее спасибо Neutral
В начало
Пол:Муж Шурик
Я живу тут....


Возраст: 42
Знак зодиака: Овен
Зарегистрирован: 15.01.2003
Сообщения: 1951
Откуда: Киев
СообщениеВт, 01-Июл-2003 13:54 
Цитата

Насколько я помню, ты работаешь через API, без VCL. В VCL устранение мерцания делается через DoubleBuffered := True. Если это свойство установленно рисование идёт через буферный Bitmap. Может и тебе что-то похожее делать вручную.

Насколько я понял из справки LockWindowUpdate буферизирует вызываемые функции рисования на уровне системы. Я правильно понял?

Ещё один подход - сделать чтобы при перерисовке не очищался фон. Там кажется два варианта:
- InvalidateRect( ..., ..., False );
- WM_ERASEBKGND
В начало
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
DrPass
Знающий :)
/Почетный Модератор/


Возраст: 31
Знак зодиака: Лев
Зарегистрирован: 02.05.2002
Сообщения: 5709
Откуда: Донецк
СообщениеВт, 01-Июл-2003 14:19 
Цитата

CreateCompatibleDC в памяти, рисуешь в нем, а на WM_PAINT выводишь на форму
_________________
Да пребудет с вами Сила!
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж Шурик
Я живу тут....


Возраст: 42
Знак зодиака: Овен
Зарегистрирован: 15.01.2003
Сообщения: 1951
Откуда: Киев
СообщениеВт, 01-Июл-2003 17:38 
Цитата

to Андрей
А как ты перерисовываешь? Всё рисуешь сам или что-то рисуется стандартно системой, а что-то ты дорисовываешь поверху? Я никогда не создавал control-ы через API, поэтому не очень представляю какой там подход к рисованию и как туда можно вставить буферизацию через bitmap.
В VCL просто переопределяешь рисование в потомке в одной из функций, вызываешь inherited и дорисовываешь своё. Поскольку DoubleBuffered реализовано в TWinControl отображение всех стандартных компонентов можно буферизировать. Понятно всё что ты дорисовываешь тоже будет буферизироваться вместе.
.
В начало
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Андрей
Гость







СообщениеВт, 08-Июл-2003 11:37 
Цитата

Когда я перехватываю WP_PAINT в WParam содержится HDC, контрола, кот-ый в данный момент перерисовывается. Затем я создаю HBitmap: BMP := CreateCompotableBitmap(...) и рисую там красивый фон и движок перемещения (Это жутко нравится моему шефу). Потом копирую этот битмап на TrackBar функцией BitBlt(..., SRCCOPY). Но мерцание все равно остается. Перед этим я посылаю контролу сообщение WM_ERASEBKGND.

Я специально вскрыл Windows Media Player - там в эквалайзере используются стандартные TrackBar, кот-ые не мерцают, кода перерисовываются. А как они это сделали - неизвестно... :(
В начало
Показать сообщения:   
Страница 1 из 1
Перейти:  
Новая тема  Ответить  Печать

Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете присоединять файлы в этом форуме
Вы можете скачивать файлы в этом форуме
хостинг от .masterhost 
Rambler's Top100