![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Волод |
|
|||
|
Unregistered |
В одной из книг, которую я читаю, постоянно натыкаюсь на такой код:
- DeleteObject(SelectObject(hdc, GetStockObject(BLACK_PEN))); Я читал про то, что все GDI ресурсы, типа кистей, перьев, шрифтов после использования должны быть уничтожены, но не понимаю смысл такой конструкции. Получается, ранее созданное и загруженное в контекст перо через этот код мы уничтожили, но ведь на его место мы протолкнули другое, которое также занимает ресурсы/память – так в чем тогда разница? |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
А оно занимает другие ресурсы-память.
GDI-объекты (кисть и т.д.) вовсе не живут в контексте - оно существует отдельно. Думай об HBRUSH как об указателе на динамическую память. Тебя же не удивляет, что после присваивания указателю другого значения, выделенная ранее память теряется (если ее явно не освободить). В контексте хранится только HANDLE (указатель!) объекта, а не сам объект. Windows NT (2000, XP) освобождают занатые GDI-ресурсы, но только по завершению процесса. Если интенсивно менять (создавать) GDI-объекты при отрисовке окна, и не освобождать все корректно, свободные HANDLE'ы быстро заканчиваются. Это тоже надо в форум Windows API. -------------------- ... |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |