Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Перерисовка окна - её предотвращение [D6, Win2k]


SaperXL ©   (2003-04-07 21:42:00) 

Возникла проблема - надо предотвратить перерисовку окна. Проблема заключается в том, что это окно Я отдаю на растерзание MapInfo (географическая информационная система) и она через OLE там рисует (ну точнее, она в это окно встраивает свое окно...). Когда Я хочу нарисовать что-нить на карте Я передаю сообщение MapInfo и она рисует. Но мне надо кучу всего нарисовать а разом нельзя - только дискретно, и каждый раз обновляется окно - некрасиво (заказчик стебёт). Стандартное средство от MapInfo (их даже два) не работает, напонятно, почему. Так вот нельзя ли как нить на API взять HWND и не давать ему обновляться, а потом (когда все выведем) разом отобразить все изменения? Помогите, пожалуйста...


SaperXL   (2003-04-08 22:25:00) [1]

Ребяты всем спасибо! Проблему разрешило мудрое замечание про LockWindowUpdate.


Diamond Cat   (2003-04-08 15:27:00) [2]

делай изменения на другой форме (невидимой) а в "знаменательный момент" BitBlt на свою, перекрытие перерисовки своего окна череповато, появлением на нем непрорисованных регионов


NAlexey   (2003-04-08 11:02:00) [3]

Советовали и не раз, MBo много раз говорил, что стараться надо рисовать API StretchBlt, BitBlt, TransparentBlt. Скорость перерисовки увеличивается в порядки. Сам убеждался на личном примере: DrawGrid. В нем, в каждой клетке рисуется картинка, количество ячеек порядка от 200-1000 необходимо менять размеры формы, а соответственно размеры Grid и перерасчитывать кол-во видимых ячеек ну и перерисовывать. До того как переделал на API тормозило просто страшно, все дергалось и т.д. Заменил все Draw на BitBlt и StretchBlt все работает гладко.


Иван Шихалев   (2003-04-08 08:17:00) [4]

Перегнать - легко. GetDC, SelectBitmap, BitBltи так далее. В общем, см. функции работы с Bitmap.


Alex Konshin   (2003-04-08 04:40:00) [5]

Попробуй LockWindowUpdate.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/pantdraw_4v8r.asp


SaperXL   (2003-04-08 01:15:00) [6]

А кстатит, с перекрытием, а как нить можно картинку с обного окна на другое перегнать? Тока надо по АПИшному - иначе заказчик вообще уволит... Если подскажете, то может быть перекрывать другим не плохая идея: скопировал содержимое в другое окно его как картинку показал - втихаря обновил картинку и опять показал настоящую карту... Итак, как на АПИ перегнать картинку с одного HWND на другое?


SaperXL   (2003-04-08 01:11:00) [7]

Скрыть? это Visible = false что ль?
Если скрыть - то оно ничего показывать не будет - а надо, чтобы показывало, но старое, а потом, в знаменательный момент раз - и все перерисовалось по новому. А скрывать ещё не могу, потому, что перерисовывать все время приходится и это некрасиво, когда карта "потухает" на секунду - 2... А неужели нельзя приостановить поток сообщений посланных конкретному окну?


Иван Шихалев   (2003-04-07 22:06:00) [8]

Гм... А ведь действительно, можно и само перерисовываемое окно скрыть... Если это удобно, конечно.


Иван Шихалев   (2003-04-07 22:04:00) [9]

Могу посоветовать перекрыть прорисовываемое окно топовым с индикатором состояния прорисовки (если окно закрыто другим - оно перерисовываться явно не должно). Хотя это и изврат :)


DVM   (2003-04-07 22:03:00) [10]

Рисуй на невидимом окне, а потом покажи окно. Или рисуй в память на битмап какой если можно конечно.


Наверх

Титульная страница Поиск, карта сайта Написать письмо