CImageList和CListCtrl贴图有关问题

CImageList和CListCtrl贴图问题?
本帖最后由 VisualEleven 于 2012-12-28 17:52:42 编辑
有一个文件夹,里面有一些.jpg图片,然后读取出来,贴到CListCtrl中,因为想要得到缩放比例相等的图片,所以我有两种思路:
    1、我建立同样大小的CImageList对象,程序中是(宽84,高100),然后通过gdi+读取图片转换成Bitmap,然后通过CBitmap对象取得图片的宽和高做缩放,缩放时候是以宽为基准。问题就产生了,比如一张比例缩放后宽是84,但是高只有80,程序最后的结果是,剩下的20高度是黑色,请问这个黑色部分可以设置成别的颜色吗?(我试过CImageList * p->SetBkGround(RGB(255,255,255))),但是没用。
    2、然后我就想用第二种方法,每读取一张图片,比例缩放宽和高(width,height)建立一个CImageList对象,在Create函数中设置为缩放后的width和height,下面的代码是这种方法的:
	while (res)
{
    CImageList m_Imagelist; 
    m_Imagelist.Create(84, 100, ILC_COLOR16, 5, 5);
    m_img_list.SetImageList(&m_Imagelist, LVSIL_NORMAL); //关联

    res = ff.FindNextFile();
    strFileName = ff.GetFileName();
    m_strImageName = strFilePathName + "\\" + strFileName;  //获取文件绝对路径
    m_img_list.InsertItem(i, "80%", i);

    Bitmap bmp(m_strImageName.AllocSysString());    //用图片的绝对路劲来初始化
    int sourceWidth = 84;
    int sourceHeight = bmp.GetHeight() * sourceWidth / bmp.GetWidth();
    Bitmap * pThumbnail = (Bitmap*)bmp.GetThumbnailImage(sourceWidth, sourceHeight, NULL, NULL);

    HBITMAP hBmp;
    pThumbnail->GetHBITMAP(RGB(255,255,255), &hBmp);
    CBitmap *pImage = CBitmap::FromHandle(hBmp);    //转换格式
    m_Imagelist.Add(pImage, RGB(255,255,255));      //添加

    pImage->DeleteObject();
    m_Imagelist.DeleteImageList();
    i++;
}
函数是一个循环查找文件,然后贴图的过程。程序的结果是只有80%显示了,没有显示图片。请问这个为什么?如果想实现比例缩放的缩略的图的显示,用以上两个的思路可以吗?谢谢!!!

------解决方案--------------------
//修改开始,创建图像列表放到循环外面---------------
CImageList m_Imagelist; //这个必须是类成员变量或指针
m_Imagelist.Create(84, 100, ILC_COLOR16, 5, 5);
m_img_list.SetImageList(&m_Imagelist, LVSIL_NORMAL); //关联
//修改结束---------------
while (res)
{
    res = ff.FindNextFile();
    strFileName = ff.GetFileName();
    m_strImageName = strFilePathName + "\\" + strFileName;  //获取文件绝对路径
    m_img_list.InsertItem(i, "80%", i);
    Bitmap bmp(m_strImageName.AllocSysString()); //用图片的绝对路劲来初始化
    //修改开始---------------
    int nSrcWidth = bmp.GetWidth();
    int nSrcHeight = bmp.GetHeight();
    int nNewWidth;
    int nNewHeight;
    GetProportionSize(nSrcWidth,nSrcHeight,84,100,&nNewWidth,&nNewHeight);
    int x=(84-nNewWidth)/2;//重新计算X/Y,使图片居中
    int y=(100-nNewHeight)/2;
    Bitmap Thumbnail(84,100);//创建缩略图,和Imagelist一样尺寸
    Graphics* pGraphics=new Graphics(Thumbnail);
    pGraphics->FillRectangle(...);//给缩略图填充一个背景,比如白色