Информация об изменениях

Сообщение Re: HDC (MemDC) и его bitmap от 29.03.2024 16:18

Изменено 29.03.2024 16:19 Pavel Dvorkin

Re: HDC (MemDC) и его bitmap
Здравствуйте, пффф, Вы писали:

П>
П>HDC hMemDc = ::CreateCompatibleDC(hScreenDc);
П>HBITMAP hMemBmp    = ::CreateCompatibleBitmap(hScreenDc, clientSize.x, clientSize.y );
П>HBITMAP hOldMemBmp = (HBITMAP)::SelectObject(hMemDc, (HGDIOBJ)hMemBmp);
П>


П>Перед удалением hMemDc обычно принято восстанавливать в контексте hOldMemBmp. А надо ли это обязательно делать?


Надо.

>Я так понимаю, что при разрушении hMemDc он разрушит тот hBitmap, который в него выбран — т.е. тот, который я создал и выбрал в DC.


Не разрушит. Это не деструктор. Надо для hMemBmp делать DeleteObject, а для того, чтобы он сработал, надо, чтобы hMemBmp не была выбрана в контексте

Do not delete a drawing object (pen or brush) while it is still selected into a DC.

https://learn.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-deleteobject

>А hOldMemBmp я сам разрушу.


А ее разрушать не надо — ты ее не создавал, она сама создалась при создании hDC.
Re: HDC (MemDC) и его bitmap
Здравствуйте, пффф, Вы писали:

П>
П>HDC hMemDc = ::CreateCompatibleDC(hScreenDc);
П>HBITMAP hMemBmp    = ::CreateCompatibleBitmap(hScreenDc, clientSize.x, clientSize.y );
П>HBITMAP hOldMemBmp = (HBITMAP)::SelectObject(hMemDc, (HGDIOBJ)hMemBmp);
П>


П>Перед удалением hMemDc обычно принято восстанавливать в контексте hOldMemBmp. А надо ли это обязательно делать?


Надо.

>Я так понимаю, что при разрушении hMemDc он разрушит тот hBitmap, который в него выбран — т.е. тот, который я создал и выбрал в DC.


Не разрушит. Это не деструктор. Надо для hMemBmp делать DeleteObject, а для того, чтобы он сработал, надо, чтобы hMemBmp не была выбрана в контексте

Do not delete a drawing object (pen or brush) while it is still selected into a DC.

https://learn.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-deleteobject

>А hOldMemBmp я сам разрушу.


А ее разрушать не надо — ты ее не создавал, она сама создалась при создании hMemDC.