


Нужен ли вызов SelectObject()
Вот есть код:
HDC HDCMem = CreateCompatibleDC(Item->hDC);
HBITMAP hBitmap = CreateCompatibleBitmap(Item->hDC, Item->rcItem.right - Item->rcItem.left, Item->rcItem.bottom - Item->rcItem.top);
HGDIOBJ oldBitmap = SelectObject(HDCMem, hBitmap);
// Рисование
SelectObject(HDCMem, oldBitmap); // Нужен ли вызов вот этой функции?
DeleteObject(hBitmap);
DeleteDC(HDCMem);
Как говорят на многих форумах, старый объект необходимо вернуть в контекст устройства, чтобы избежать утечки ресурсов. Но по сути никакой утечки ресурсов я не заметил, в диспетчере задач рядом с процессом можно посмотреть кол-во GDI объектов, при этом их количество у меня не меняется. Значит функция DeleteObject(hBitmap); срабатывает, хотя в MSDN написано: "Не удаляйте объект рисунка (перо или кисть), пока он все еще выбран в контроллере домена." Или утечка ресурсов подразумевает утечку оперативной памяти? Хотя наблюдая в диспетчере задач, оперативная память программы не становится больше, при каждой перерисовки окна
Вызов SelectObject(HDCMem, oldBitmap); необходим. Это позволяет вернуть старый объект в контекст устройства, предотвращая утечки ресурсов. Без этого могут возникнуть проблемы, не сразу заметные в диспетчере задач. Утечка ресурсов может проявиться в более длительном использовании программы или в других системах с разной конфигурацией. Всегда следует возвращать старые объекты перед удалением, чтобы соблюсти правильное управление ресурсами GDI.