求助:VC如何實現的放大和縮小?
用StretchBlt函數即可實現,參考代碼如下:
void?CImgWnd::OnPaint(){
CPaintDC?dc(this);?//?device?context?for?painting
//獲得窗口大小
CRect?r;
GetClientRect(&r);
//填充背景
HBRUSH?brush?=?(HBRUSH)::GetStockObject(GRAY_BRUSH);
::FillRect(dc.m_hDC,&r,brush);
dc.SetStretchBltMode(HALFTONE);
//將位圖選進設備場景中
CDC?memdc;
memdc.CreateCompatibleDC(?&dc?);
CBitmap*?pOldBmp=?memdc.SelectObject(&m_bmpImage);
//獲得位圖參數
BITMAP?bmp;
m_bmpImage.GetBitmap(&bmp);
//開始縮放
switch(m_nStrechType)
{
case?STRECH_1_1://1:1
dc.BitBlt(r.left,r.top,r.Width(),r.Height(),&memdc,0,0,SRCCOPY);
break;
case?STRECH_FULL_X://按寬度
dc.StretchBlt(r.left,r.top,r.Width(),bmp.bmHeight,&memdc,0,0,
bmp.bmWidth,bmp.bmHeight,SRCCOPY);
break;
case?STRECH_FULL_Y://按高度
dc.StretchBlt(r.left,r.top,bmp.bmWidth,r.Height(),&memdc,0,0,
bmp.bmWidth,bmp.bmHeight,SRCCOPY);
break;
case?STRECH_FULL://充滿窗口
dc.StretchBlt(r.left,r.top,r.Width(),r.Height(),&memdc,0,0,
bmp.bmWidth,bmp.bmHeight,SRCCOPY);
break;
case?STRECH_CENTER://居中顯示,大小為窗口的壹半
dc.StretchBlt(r.Width()/4,r.Height()/4,r.Width()/2,r.Height()/2,&memdc,0,0,
bmp.bmWidth,bmp.bmHeight,SRCCOPY);
break;
}
//還原
memdc.SelectObject(pOldBmp);
}