Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2003.06.09;
Скачать: [xml.tar.bz2];

Вниз

Перерисовка окна - её предотвращение   Найти похожие ветки 

 
SaperXL   (2003-04-07 21:42) [0]

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


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

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


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

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


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

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


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

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


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

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


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

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


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

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


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

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


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

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


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

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



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2003.06.09;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.008 c
4-26835
zDEUSz
2003-04-10 23:02
2003.06.09
Замена VCL таймеру


14-26727
Nox
2003-05-20 23:48
2003.06.09
Подкиньте идейку что ли......


9-26322
Yrtimd
2002-12-30 18:40
2003.06.09
DelphiX под Delphi 7 - это как ?..


7-26823
Some1
2003-03-30 08:38
2003.06.09
Идентификация дискетки


4-26827
Griffin
2003-04-08 17:21
2003.06.09
Какое сообщение нужно послать





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский