既然已经有DDB了,也就是说有CBitmap对象了。//假设bmp1是已经有的64×64的位图。
CDC srcDC,memDC;
CBitmap * pOldBmp;
pOldbmp = new CBitmap;//把bmp1画入设备srcDC中
srcDC.CreateCompatibleDC(&dc);
srcDC.SelectObject(&bmp1);//建一块32×32的内存设备区域
bmp2.CreateCompatibleBitmap(&dc,32,32);
memDC.CreateCompatibleDC(&dc);
pOldBmp = memDC.SelectObject(&bmp2);
//将bmp1考到32×32的memDC上,多余的区域就被扔掉
memDC.BitBlt(0,0,32,32,&srcDC,0,0,SRCCOPY);
//把oldbmp替换进去,bmp2就是所要的32×32的位图
memDC.SelectObject(pOldBmp);

解决方案 »

  1.   

    你看清楚StretchBlt的参数的意思,前面两个是目标的起始坐标
    StretchBlt(0,0,32,32....才对吧?
      

  2.   

    那就把这句话
    memDC.BitBlt(0,0,32,32,&srcDC,0,0,SRCCOPY);
    换成
    memDC.StretchBlt(0,0,32,32,&srcDC,0,0,32,32,SRCCOPY);
    就得到缩小的图了
      

  3.   

    对呀以下是我的代码:
    bmp1.Attach(hbmp1);
        bmp1.GetBitmap(&bmpstru);
    ////// 此时a1,a2 是正确的大小。
    int a1=bmpstru.bmWidth;
    int a2=bmpstru.bmHeight;
    CDC memdc;
    memdc.CreateCompatibleDC(GetDC());
    holdbmp1=memdc.SelectObject(&bmp1);
    GetDC()->StretchBlt(0,0,LVLARGEICONCX,LVLARGEICONCY,&memdc,0,0,bmpstru.bmWidth,bmpstru.bmHeight,SRCCOPY);
    currbmp=GetDC()->GetCurrentBitmap();
     currbmp->GetBitmap(&bmpstru);
    //////// 但此时a1,a2却都是1。
          a1=bmpstru.bmWidth;
     a2=bmpstru.bmHeight;