Здравствуйте, Pavel Dvorkin, Вы писали:
П>>Перед удалением hMemDc обычно принято восстанавливать в контексте hOldMemBmp. А надо ли это обязательно делать?
PD>Надо.
Аргументируй
>>Я так понимаю, что при разрушении hMemDc он разрушит тот hBitmap, который в него выбран — т.е. тот, который я создал и выбрал в DC.
PD>Не разрушит. Это не деструктор. Надо для hMemBmp делать DeleteObject, а для того, чтобы он сработал, надо, чтобы hMemBmp не была выбрана в контексте
Почему не разрушит? При создании HDC там же откуда-то появляется дефолтный hBitmap? Я полагаю, что он создаётся вполне стандартными средствами. Ну, может, там унутре есть функция с доп параметром bool allowDestroySelectedObj, что в наружу не прокинуто, или делается SelectObject с нулевым hBitmap, освобождая дефолтный и позволяя его удаление.
PD>Do not delete a drawing object (pen or brush) while it is still selected into a DC.
PD>https://learn.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-deleteobject
Это я в курсе. Но это снаружи, а как унутре, кто знает?
>>А hOldMemBmp я сам разрушу.
PD>А ее разрушать не надо — ты ее не создавал, она сама создалась при создании hMemDC.
Так создалась скорее всего через стандартные механизмы.
Я на самом деле что-то не заметил нигде запрета такого способа работы с GDI ресурсами.
Ну и пока сделал именно так — всё работает, ничего не падает, GDI ресурсы вроде не текут, всё нормально