Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Небольшой вопрос по SetClassLong


Автор: dimonser 26.5.2010, 22:36
Изменяю цвет фона приложения вот так вот:
Код

 SetClassLong(hwnd,GCL_BACKGROUND,(LONG)CreateSolidBrush(crBack));

все прекрасно работает, вот только возник одна мысль которая меня запутал, дойдя до вызова CreateSolidBrush() займется ли память которую затем необходимо освободить, как в случае 
Код

HBRUSH hbr;
hbr=CreateSolidBrush(...);

С удовольствием выслушаю ваши ответы!

Автор: 586 26.5.2010, 23:51
При смене кисти, старую кисть нужно удалить функцией DeleteObject.
Код будет такой:
Код
DeleteObject((HGDIOBJ)SetClassLongPtr(hwnd, GCLP_HBRBACKGROUND, (LONG_PTR)CreateSolidBrush(crColor)));

Автор: GremlinProg 27.5.2010, 09:18
Цитата(dimonser @  27.5.2010,  00:36 Найти цитируемый пост)
займется ли память которую затем необходимо освободить, как в случае 

займется, но за ней можно в принципе не следить:
Цитата(WNDCLASSEX Structure @  MSDN)

The system automatically deletes class background brushes when the class is unregistered by using UnregisterClass. An application should not delete these brushes. 

а 586, совершенно верно показал порядок установки новой кисти

Добавлено через 3 минуты и 11 секунд
хотя вот множественное число (brushes) наводит и на другие мысли: сомневаюсь, что оно следит за всеми кистями, которые ставятся в течении работы класса, но так можно подумать :)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)