1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
|
BOOL ChangeImageListHeight(CImageList *pDestImgList,CImageList *pSrcImgList,LONG extraheight)
{
ASSERT(extraheight>0);
IMAGEINFO imginfo;
VERIFY(pSrcImgList->GetImageInfo(0,&imginfo));
CBitmap *pBitmapImage=CBitmap::FromHandle(imginfo.hbmImage);
CBitmap *pBitmapMask=CBitmap::FromHandle(imginfo.hbmMask);
BITMAP bm;
VERIFY(pBitmapImage->GetBitmap(&bm));
CBitmap newimage,newmask;
{
CDC memdc1,memdc2;
{
CWindowDC screendc(NULL);
if ( !newimage.CreateCompatibleBitmap(&screendc,bm.bmWidth,bm.bmHeight+extraheight) ||
!newmask.CreateBitmap(bm.bmWidth,bm.bmHeight+extraheight,1,1,NULL) ||
!memdc1.CreateCompatibleDC(&screendc) ||
!memdc2.CreateCompatibleDC(&screendc) )
AfxThrowResourceException();
}
CBitmap *pOldBitmap1=memdc1.SelectObject(&newimage);
CBitmap *pOldBitmap2=memdc2.SelectObject(pBitmapImage);
memdc1.BitBlt(0,extraheight>>1,bm.bmWidth,bm.bmHeight,&memdc2,0,0,SRCCOPY);
memdc1.SelectObject(&newmask);
memdc2.SelectObject(pBitmapMask);
memdc1.PatBlt(0,0,bm.bmWidth,bm.bmHeight+extraheight,BLACKNESS);
memdc1.BitBlt(0,extraheight>>1,bm.bmWidth,bm.bmHeight,&memdc2,0,0,SRCCOPY);
memdc1.SelectObject(pOldBitmap1);
memdc2.SelectObject(pOldBitmap2);
}
if (pDestImgList->Create( (imginfo.rcImage.right-imginfo.rcImage.left),
bm.bmHeight+extraheight,ILC_COLOR|ILC_MASK,0,0 ))
{
if (pDestImgList->Add(&newimage,&newmask)==0)
return TRUE; // succès
else
pDestImgList->DeleteImageList();
}
return FALSE; // échec
} |
Partager