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

Вниз

Обновление окна. Что при этом происходит ?   Найти похожие ветки 

 
SPeller   (2002-03-21 08:06) [0]

Знатоки! Как винда обновляет окно, когда его закрываешь другим, а потом это другое убираешь? Какими функциями, сообщениями пользуется. Необходимо сделать полностью идентичный механизм программно.
Спасибо...


 
VuDZ   (2002-03-21 08:12) [1]

когда надо обновить окно, в стеке сообщений выставляется флажок и при изъятии сообщения приходит WM_PAINT, т.е. оно никем не посылается, хотя это можно сделать самому.
если при создание окна, точнее при регистрации его класса поставить флажок CS_SAVEBITS, то винда сама будет перерисовывать окно:

Saves, as a bitmap, the portion of the screen image obscured by a window of this class. When the window is removed, the system uses the saved bitmap to restore the screen image, including other windows that were obscured. Therefore, the system does not send WM_PAINT messages to windows that were obscured if the memory used by the bitmap has not been discarded and if other screen actions have not invalidated the stored image.

This style is useful for small windows (for example, menus or dialog boxes) that are displayed briefly and then removed before other screen activity takes place. This style increases the time required to display the window, because the system must first allocate memory to store the bitmap.

Для обновления окна лучше использовать InvalidateRect() или посылать WM_PAINT. Об этом немного у Рихтера написано


 
SPeller   (2002-03-21 08:53) [2]

VuDZ © (21.03.02 08:12)
А можно примерчик, чтобы обновлялся кусок окна небольших размеров. В нерусском тексте говорится чё-то о том, что какой-то особый процесс происходит тогда, когда обновляемое окно неактивно. У меня оно должно быть активно. Если послать WM_PAINT, то обновится всё окно, чего мне не надо. InvalidateRect пробовал, но чё-то не получалось, мож чего нетак делал...


 
VuDZ   (2002-03-21 08:57) [3]

HWND hwnd - это твой окно, которое надо обновить,
RECT rct - структура типа RECT содержащая прямоугольную область нуждающаяся в обновление

InvalidateRect(hwnd, rct, FALSE);
UpdateWindow(hwnd);

так должно работать


 
SPeller   (2002-03-21 11:03) [4]

Неа, не хочет работать. Вот фрагмент кода:
(отдельный модуль)

var rc:trect;
...
rc.Left:=img.Left; //img - Image
rc.Top:=img.Top;
rc.Right:=img.Left+39;
rc.Bottom:=img.Top+11;
InvalidateRect(fhdc,@rc,false); // fhdc - DC формы
UpdateWindow(img.Parent.Handle);

Мож здесь чего нетак.


 
SPeller   (2002-03-21 11:13) [5]

VuDZ, сам косячу -

InvalidateRect(fhdc{должен быть hwnd окна, а я DC втулил} ,@rc,false); // fhdc - DC формы

Всё ништяк, пашет...
Если б не эта твоя строчка
>InvalidateRect( hwnd, rct, FALSE);
я не знаю, сколько ище и.ался...


 
VuDZ   (2002-03-21 11:19) [6]

:>
Всё дело в волшебных багах, так что переделаем все баги на фичи :>
удачи



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

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

Наверх





Память: 0.46 MB
Время: 0.006 c
4-73459
lipskiy
2002-03-24 00:42
2002.05.23
Как получить сообщение копирования в буфер любого приложени? Пример из FAQ не работает.


1-73242
Filat
2002-05-10 12:04
2002.05.23
RX Library и разные версии Delphi. Как побороть?


3-73057
MagG0T
2002-04-26 17:45
2002.05.23
Создание отчёта для элемента


4-73462
sergey_1
2002-03-25 08:04
2002.05.23
Как получить код возврата консольного прилолжения


4-73474
cok
2002-03-20 18:11
2002.05.23
Отмена удаления





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский