C++ 位图未在CFrameWnd'中绘制;上油漆

C++ 位图未在CFrameWnd'中绘制;上油漆,c++,mfc,bitmap,C++,Mfc,Bitmap,我似乎无法让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(&compon

我似乎无法让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);
components.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。

我认为GDI不知道32位位图。我以为它只处理24位。LoadBitmap成功了吗(返回TRUE)?我如何处理32位BMP?你可以使用GDI+。它支持它。香草GDI没有,我不认为。你想画什么?您试图在使用CClientDC时绘制帧?在OnPaint内部,您应该使用CPaintDC。如果您试图绘制非客户端区域,您可能希望覆盖WM_NCPAINT,然后在那里使用CWindowDC。我可以绘制矩形和灵长类,但当我使用BitBlt函数时,似乎什么都没有发生。我将尝试使用24位,我收到这些奇怪的“调试断言失败”错误弹出窗口(其中两个),但我只是忽略它们,程序运行。