Re[2]: HDC (MemDC) и его bitmap
От: пффф  
Дата: 29.03.24 16:40
Оценка:
Здравствуйте, 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 ресурсы вроде не текут, всё нормально
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.