在内存中画图,然后用StretchBlt画到picturebox上,怎么缩放后有一部分没出来,button1代码如下:
CDC* pDC = GetDlgItem(IDC_STATIC)->GetDC();
CDC memDC;
memDC.CreateCompatibleDC(pDC);
CRect RectPicturebox;
GetDlgItem(IDC_STATIC)->GetClientRect(&RectPicturebox);
CBitmap bmp;
bmp.CreateCompatibleBitmap(pDC,RectPicturebox.Width(),RectPicturebox.Height());
CBitmap *pOldbmp = memDC.SelectObject(&bmp);
CRect rect;
rect.bottom = 400;
rect.top = 0;
rect.left = 0;
rect.right = 400;
memDC.Ellipse(&rect);
pDC->SetStretchBltMode(STRETCH_HALFTONE | STRETCH_ORSCANS);
pDC->StretchBlt(0,0,RectPicturebox.Width(),RectPicturebox.Height(),&memDC,0,0,rect.Width(),rect.Height(),SRCCOPY);

解决方案 »

  1.   

    CRect rect;
     rect.bottom = 400;
     rect.top = 0;
     rect.left = 0;
     rect.right = 400;
    你这里的400,400是图片的大小码?
      

  2.   

    把上面的IDC_STATIC这个ID修改一下
      

  3.   


    CDC* pDC = GetDlgItem(IDC_STATIC1)->GetDC();
     CDC memDC;
     memDC.CreateCompatibleDC(pDC);
     CRect RectPicturebox;
     GetDlgItem(IDC_STATIC1)->GetClientRect(&RectPicturebox);
     CBitmap bmp;
     bmp.CreateCompatibleBitmap(pDC,RectPicturebox.Width(),RectPicturebox.Height());
     CBitmap *pOldbmp = memDC.SelectObject(&bmp);
     CRect rect;
     rect.bottom = RectPicturebox.Height();
     rect.top = 0;
     rect.left = 0;
     rect.right = RectPicturebox.Width();
     memDC.Ellipse(&rect);
     pDC->SetStretchBltMode(STRETCH_HALFTONE | STRETCH_ORSCANS);
     pDC->StretchBlt(0,0,RectPicturebox.Width(),RectPicturebox.Height(),&memDC,0,0,rect.Width(),rect.Height(),SRCCOPY);
     memDC.SelectObject(pOldbmp);
     memDC.DeleteDC();
     GetDlgItem(IDC_STATIC1)->ReleaseDC(pDC);
      

  4.   

    我就是想把源里rect画个大的Rect,然后用StretchBlt缩放到小的RectPctureBox里面,如果把rect弄成和rectpicturebox一样大,不就看不出来缩放的效果了吗