Сообщение Re: HDC (MemDC) и его bitmap от 29.03.2024 16:18
Изменено 29.03.2024 16:19 Pavel Dvorkin
Re: HDC (MemDC) и его bitmap
Здравствуйте, пффф, Вы писали:
П>
П>Перед удалением 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.
П>
П>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
Здравствуйте, пффф, Вы писали:
П>
П>Перед удалением 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.
П>
П>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.