![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Перерисовка окна - её предотвращение [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]Рисуй на невидимом окне, а потом покажи окно. Или рисуй в память на битмап какой если можно конечно.