位图未在 CFrameWnd 的 OnPaint 中绘制

Bitmap not drawing in CFrameWnd's OnPaint

本文关键字:OnPaint 绘制 CFrameWnd 位图      更新时间:2023-10-16

我似乎无法将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);

组件的定义.icon.bmp是…

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

这里应该没有问题。位图是一个32位的alpha位图,LoadBitmap返回TRUE。

它也不适用于24位。

----明白了!我的资源出现问题

这段代码对我来说似乎不错,但仍然有很多地方可能出错。测试代码以了解问题所在:-如果你画了其他东西(例如矩形),它会出现在框架窗口上吗?-尝试将bmp保存到文件中,看看它是否正常。-尝试使用工具将bmp转换为24位,看看它是否有效。

一旦你知道问题在哪里,你就可以专注于这个问题。

也许你无法使用GDI绘制一个32位的bmp,但你应该得到一些东西(至少是一个黑色方块)。无论如何,如果你需要使用GDI绘制32位的alpha通道bmp,你必须对图像进行预乘,并使用AlphaBlend方法而不是BitBlt。