· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Использование регионов (Regions)

Посл.отвђт Сообщенiе


Дата: Дек 9, 2003 03:07:00 · Поправил: Sk. Inc.

Я думаю, что такой вопрос возникал не только у меня: надо-ли удалять регионы после использования, и если да, то как.
В MSDN'е я ничего по этому поводу не нашел. Создалось впечатление, что регионы можно только создавать, а удалять нельзя.
Пример:
Install_Region proc hWnd:DWORD, lprct:DWORD
;----------------------------------------------
local	hRegion:DWORD
;----------------------------------------------
	invoke	CreateEllipticRgnIndirect,lprct
	mov	hRegion,eax
	invoke	SetWindowRgn,hWnd,hRegion,TRUE
	
	ret
endp
Если их все же нужно удалять, то удалятся ли они автоматически, после вызова функции ExitProcess, или их нужно удалять вручную?


Дата: Дек 9, 2003 07:15:31

DeleteObject


Дата: Дек 9, 2003 19:07:17 · Поправил: Sk. Inc.

Quantum
А когда его вызывать? После SetWindowRgn? Объясни, плиз :)


Дата: Дек 9, 2003 19:56:05

Sk. Inc.
После SetWindowRgn?
Ни в коем случае.

Вызывать когда регион уже не используется, например по окончанию программы, когда окно уже разрушено. Хотя в данном случае, думаю, регион можно не освобождать. Другое дело, если регионы используются для рисования (в WM_PAINT, например) и создаются при каждом вызове обработчика. Тогда, если их не удалять, сразу возникнет утечка ресурсов.


Дата: Дек 9, 2003 21:19:37

Quantum
данном случае, думаю, регион можно не освобождать
А если я комбинирую регионы с помощью функции CombineRgn? В своей программе я использую скин для окна, и мне нужно обрезать окошко, по форме BMP-картинки. Приходится попиксельно просматривать картинку и отрезать регионами кусочки окна. В результате создается очень много регионов. Как быть в этом случае? Код будет выглядеть почти как в примере от Дек 9, 2003 03:07:00, только вместо эллиптического региона будет создаваться какой-то другой.


Дата: Дек 10, 2003 04:19:33

Нечто похожее я уже делал в одной программе: комбинировал прямоугольный регион с эллиптическим для получения сегмента эллипса и ещё какой-то узор... При этом, я всегда удалял промежуточные регионы сразу после комбинации. Примерно так:
1. Создаю прямоугольник (RGN1)
2. Создаю эллипс (RGN2)
3. Комбинирую (RGN3 = RGN1 XOR RGN2)
4. Удаляю RGN1
5. Удаляю RGN2
... рисую используя RGN3
N. Удаляю RGN3


Дата: Дек 10, 2003 06:45:58 · Поправил: comrade

Регионы можно сохранять через GetRegionData(), и подгружать при помощи ExtCreateRegion(). По моему опыту, после вызова SetWindowRgn() регион всё равно становится не работующим (все операция а него решаются нулём). Но если уж так хочетса, можно его удалить путем Quantam'a.


Дата: Дек 11, 2003 02:04:18

Quantum
comrade
Спасибо за помощь, попробую.


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.075