当前位置 - 股票行情交易網 - 國際漫評 - 求助:VC如何實現的放大和縮小?

求助: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);

}