Растровое изображение не рисуется в OnPaint CFrameWnd - PullRequest
0 голосов
/ 02 апреля 2012

Я не могу заставить CBitmap действительно отображаться на экране ... Вот код в OnPaint:

CRect frm;
GetClientRect(frm);

CClientDC dc(this);
//dc.FillSolidRect(CRect(0, 0, 1000, 1000), RGB(255, 255, 255));
CDC dcMem;
dcMem.CreateCompatibleDC(&dc);
CBitmap* cache = dcMem.SelectObject(&components.icon.bmp);

dc.BitBlt(0, 0, 55, 55, &dcMem, 0, 0, SRCCOPY);
dc.SelectObject(cache);

Определение component.icon.bmp - это ...

components.icon.bmp.LoadBitmap(BMP_BOARDER);
BITMAP icon;
components.icon.bmp.GetBitmap(&icon);

Здесь не должно быть проблем.Растровое изображение - это 32-разрядное альфа-изображение, и LoadBitmap вернул TRUE.

Он также не работает с 24-разрядным.

---- Понял!Проблема с моими ресурсами

1 Ответ

0 голосов
/ 03 апреля 2012

Этот код кажется мне хорошим, но есть еще много вещей, которые могут ошибаться. Проверьте свой код, чтобы узнать, в чем проблема: - Если вы рисуете что-нибудь еще (например, прямоугольник), оно появляется в окне кадра? - Попробуйте сохранить bmp в файл и посмотрите, все ли в порядке. - Попробуйте преобразовать bmp в 24 бит, используя инструмент, и посмотрите, работает ли он.

Как только вы поймете, в чем проблема, вы сможете сосредоточиться на ней.

Возможно, вы не сможете нарисовать 32-битный BMP с использованием GDI, но вы должны что-то получить (по крайней мере, черный квадрат). В любом случае, если вам нужно нарисовать 32-битные BMP альфа-канала с использованием GDI, вам нужно предварительно умножить изображение и использовать метод AlphaBlend вместо BitBlt.

...