CListCtrl和缩略图无法绘制

CListCtrl and thumnail fails to draw

本文关键字:绘制 略图 CListCtrl      更新时间:2023-10-16

我使用下面的代码为列表控件创建一个缩略图

HDC hDC=::GetDC(hWnd);
HDC pDC=::CreateCompatibleDC(hDC);
HBITMAP bm=::CreateCompatibleBitmap(hDC,THUMBNAIL_W,THUMBNAIL_H);
HBITMAP oldBmp=(HBITMAP)SelectObject(pDC,bm);           
img.StretchBlt(pDC,rcBorder); 
CBitmap bmp;
bmp.Attach(bm);
m_imgLst.Add(&bmp,RGB(0,0,0));

一个大图被加载,它被存储在CImage

CImage img;

但是缩略图是黑色的,什么也没画
上面的代码
rcBorder img.StretchBlt (pDC);

这是一个不完整且措辞拙劣的问题。混合和匹配Windows API, MFC和GdiPlus是好的,但没有给出足够的相关代码或解释,所有人都可以猜测你的问题。

这是我的猜测。位图黑色的症状通常意味着您的位深度错误。我不知道你在用CImage做什么,但是上面的代码看起来很好,尽管在调用的API上缺少任何成功的验证。

我将进一步假设m_imgLst是一个MFC CImageList对象,在这种情况下,可能的错误是在该对象的其他地方的.Create调用中,您现在试图添加的图像具有不兼容的位深度或尺寸。

您可以通过检查.Add的返回值来测试我的理论,它应该是新插入图像的索引,如果失败则为-1。