|
|
| Посл.отвђт | Сообщен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 |