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

Вниз

Как найти обновляемый регон?   Найти похожие ветки 

 
}{enon ©   (2004-02-07 10:38) [0]

Ситуация такова:
Нужно отследивать изменения всех системы (перерисовку таковых) и что-то изменять в изменяемом окне. При этом (насколько я понимаю) может быть перерисован лишь маленький участок окна, при этом нужно обработать только его.

Делаю так:
1) Прога ставит глобальный hook на WM_PAINT.
2) Если этот hook срабатывает, то DLL выполняет необходимые операции.

Возникают два вопроса:
1) Как определить, что именно изменено в окне?
2) Можно ли это все сделать проще?


 
}{enon ©   (2004-02-07 10:39) [1]

Сорри, "всех окон системы" и "в перерисовываемом окне"


 
MBo ©   (2004-02-07 14:29) [2]

GetUpdateRgn(Rect)


 
Игорь Шевченко ©   (2004-02-07 22:09) [3]

GetUpdateRect(hWnd, Rect, false)
GetUpdateRgn(hWnd, Rect, false)

> и что-то изменять в изменяемом окне.


InvalidateRect(...)
InvalidateRgn (...)


> Можно ли это все сделать проще?


Во-первых, я сильно сомневаюсь, что у тебя получится изменить что-то.
Во-вторых:
"GetUpdateRect returns nonzero if an update region exists, and zero if one does not. This provides a simple and efficient means of determining whether a WM_PAINT message resulted from an invalid area. "

В-третьих, если не секрет, зачем это надо делать ?


 
}{enon ©   (2004-02-08 08:36) [4]

Спасибо за ответ!
2 Игорь Шевченко
Не секрет - пишу что-то наподобие WindowBlinds (т.е. программу для изменения интерфейса), поэтому "что-то изменить" на самом деле означает "наложить на окно свою картинку". Обновяемый регион нужен, чтобы не рисовать заново все окно, если достаточно маленькой его части.
P.S. Не пишите, что "одному такое сделать почти нереально". Сам знаю, но я не собираюсь делать эту программу коммерческой, она планируется совсем для других целей (практика в работе с hooks + реферат по информатике).


 
Игорь Шевченко ©   (2004-02-08 13:25) [5]

}{enon ©   (08.02.04 08:36)


> Не секрет - пишу что-то наподобие WindowBlinds (т.е. программу
> для изменения интерфейса), поэтому "что-то изменить" на
> самом деле означает "наложить на окно свою картинку".


Что есть WindowBlinds не знаю, но подозреваю, что нечто, аналогичное темам в Windows XP. Если так, то во-первых: не WM_PAINT, а WM_NCPAINT(WM_NCACTIVATE,WM_NCMOUSExxx), потому что вид интерфейса определяется видом неклиентской части окна. Во-вторых, таки да, нереально в одиночку :) Механизм изменения внешнего вида окон в темах XP реализован довольно непросто и сильно взаимодействует с операционной системой.
В-третьих, для расширения кругозора в отношении работы менеджера окон в Windows могу порекомендовать изучить исходные тексты Wine, их можно найти на http://www.winehq.com

Удачи!


 
}{enon ©   (2004-02-08 16:58) [6]

Спасибо!
P.S. WindowsBlinds действительно аналогичен темам в XP, но обладает большими возможностями и работает во всех виндах.



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

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

Наверх




Память: 0.46 MB
Время: 0.044 c
1-1080718810
neodiX
2004-03-31 11:40
2004.04.18
Delphi7, XPManifest, TGroupBox - отображение кириллицы. Решение!


3-1079686617
_Andy_
2004-03-19 11:56
2004.04.18
Datamodule


6-1076919117
Ламер
2004-02-16 11:11
2004.04.18
Можно ли получить IP компа, на котором запущен ServerSocket?


9-1066226183
kopcap
2003-10-15 17:56
2004.04.18
Система боя


7-1075682062
Bes
2004-02-02 03:34
2004.04.18
COM порт





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