......
CDC dcMem;
dcMem.CreateCompatibleDC(pDC);
CBitmap *pOldBitmapMem = dcMem.SelectObject(this); //this属于一个CBitmap的派生类
dcMem.SetMapMode(pDC->GetMapMode()); CDC dcImage;
dcImage.CreateCompatibleDC(pDC); CBitmap bitmapImage;
bitmapImage.CreateCompatibleBitmap(&dcMem, cx, cy);
CBitmap *pOldBitmapImage = dcImage.SelectObject(&bitmapImage);
dcImage.SetMapMode(pDC->GetMapMode()); dcImage.StretchBlt(x, y, cx, cy, &dcMem, org.x, org.y, size.x, size.y, SRCCOPY); //为什么此处可以正常显示位图的一部分
//dcImage.BitBlt(x, y, cx, cy, &dcMem, org.x, org.y, SRCCOPY); //而此处显示的却是一全黑的位图???
pDC->BitBlt(x, y, cx, cy, &dcImage, org.x, org.y, SRCCOPY);
......如何才能将dcMem中的位图缩小显示?????

解决方案 »

  1.   

    为什么不这样:
    pDC->StretchBlt(x, y, cx, cy, &dcMem, org.x, org.y, size.x, size.y, SRCCOPY);另外,对于内存DC如无必要不要SetMapMode()
      

  2.   

    没有直接
    pDC->StretchBlt(x, y, cx, cy, &dcMem, org.x, org.y, size.x, size.y, SRCCOPY);
    是因为这段代码后面还有背景透明处理的代码。我也曾在代码的最后直接用过pDC->StretchBlt,但却显示了两个图形,一个是我想要的宽高为cx、cy的缩小的图形,一个是宽高为size.x、size.x未缩小的图形。不明白为什么会这样???所以尝试先将位图缩小,再做背景透明处理。
      

  3.   

    用这个TransparentBlt
    ::TransparentBlt(pDC->GetSafeHdc(),x, y, cx, cy, dcMem.GetSafeHdc(), org.x, org.y, size.x, size.y, RGB(0,255,0));
      

  4.   

    问题已经解决!我将代码改回原来的样子,在最后用pDC->StretchBlt处理,结果显示正常!!!
    也不知为什么原来会产生两个图形???!!!看来是我自己代码输入的问题!!!