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

Возраст: 42
Знак зодиака: 
Зарегистрирован: 15.01.2003
Сообщения: 1951
Откуда: Киев
|
|
|
Цитата |
|
Насколько я помню, ты работаешь через API, без VCL. В VCL устранение мерцания делается через DoubleBuffered := True. Если это свойство установленно рисование идёт через буферный Bitmap. Может и тебе что-то похожее делать вручную.
Насколько я понял из справки LockWindowUpdate буферизирует вызываемые функции рисования на уровне системы. Я правильно понял?
Ещё один подход - сделать чтобы при перерисовке не очищался фон. Там кажется два варианта:
- InvalidateRect( ..., ..., False );
- WM_ERASEBKGND |
|
| В начало |
|
 |
DrPass
Знающий :) /Почетный Модератор/

Возраст: 31
Знак зодиака: 
Зарегистрирован: 02.05.2002
Сообщения: 5709
Откуда: Донецк
|
|
|
Цитата |
|
CreateCompatibleDC в памяти, рисуешь в нем, а на WM_PAINT выводишь на форму _________________ Да пребудет с вами Сила! |
|
| В начало |
|
 |
 Шурик
Я живу тут....

Возраст: 42
Знак зодиака: 
Зарегистрирован: 15.01.2003
Сообщения: 1951
Откуда: Киев
|
|
|
Цитата |
|
to Андрей
А как ты перерисовываешь? Всё рисуешь сам или что-то рисуется стандартно системой, а что-то ты дорисовываешь поверху? Я никогда не создавал control-ы через API, поэтому не очень представляю какой там подход к рисованию и как туда можно вставить буферизацию через bitmap.
В VCL просто переопределяешь рисование в потомке в одной из функций, вызываешь inherited и дорисовываешь своё. Поскольку DoubleBuffered реализовано в TWinControl отображение всех стандартных компонентов можно буферизировать. Понятно всё что ты дорисовываешь тоже будет буферизироваться вместе.
. |
|
| В начало |
|
 |
|
|
|
Цитата |
|
Когда я перехватываю WP_PAINT в WParam содержится HDC, контрола, кот-ый в данный момент перерисовывается. Затем я создаю HBitmap: BMP := CreateCompotableBitmap(...) и рисую там красивый фон и движок перемещения (Это жутко нравится моему шефу). Потом копирую этот битмап на TrackBar функцией BitBlt(..., SRCCOPY). Но мерцание все равно остается. Перед этим я посылаю контролу сообщение WM_ERASEBKGND.
Я специально вскрыл Windows Media Player - там в эквалайзере используются стандартные TrackBar, кот-ые не мерцают, кода перерисовываются. А как они это сделали - неизвестно...  |
|
| В начало |
|
 |
|