Re: Течет ручей, бежит ручей. И ты ничья и я ничей.
Здравствуйте !
> Сабж касается утечки памяти, связанные с SetBitmap, который
> через цикл перерисовается картинка. 5 переменных HBITMAP,
> в SetBitmap, инициализируются
> при создании кнопки. Попытки использовать DeleteObject
Эти переменные надо инициализировать, сохранять, пока ведется
работа (всякие SetBitmap-ы используются, и.т.д.)
Потом, когда битмапы больше не нужны, надо выбрать для кнопки
битмап SetBitmap(NULL) и уничтожить все битмапы при помощи DeleteObject.
Тогда не будет утечки ресурсов.
Вобщем, идеология работы с ресурсами GDI такая:
1. создал
2. выбрал куда то, при этом сохранив то, что там было ранее
Например, при выборе битмапа в совместимый контекст устройства,
надо сохранять дескриптор битмапа, который в нем уже выбран.
3. попользоваться
4. вернуть все обратно (старые битмапы выбрать туда, где они были раньше,
и.т.д.).
5. убить все созданные ресурсы
то есть убивать надо все что создавал, но при этом GDI-ресурс не должен
где то использоваться, а то может не убиться.
Например, SEtBitmap можно сделать не только кнопке, но и static-у, так
вот, static control выбирает этот битмап в совместимый контекст и если
после SetBitmap сделать DeleteObject, битмап не уничтожится и произойдет
утечка ресурсов.
> же показывается быстрый
> рост каких-то GDI handles.
GDI handles - дескрипторы GDI объектов (перьев, битмапов, кистей,
контекстов, и.т.д.). ОС имеет таблицу дескрипторов GDI объектов
в ней всего 16384 элемента. На процесс может быть выделено некоторое
максимально количесво ресурсов GDI. После этого функции типа
CreatePen, CreateBitmap, и.т.д. начнут возвращать NULL.
Максимальное количество ресурсов на процесс прописано где то в реестре.
Если несколько приложений откушают все ресурсы, система начнет глючить -
окна приложений перестанут перерисовываться, и.т.д.
Поэтому ресурсы надо освобождать. Порисовал - освободил.
> Подскажите, люди, где про них почитать можно.
В MSDN, наверно. Ну и всякие книжки по программированию в винде, где
про рисование упоминается.