我的代码如下。
void CSunyardBarView::OnDraw(CDC* pDC)
{
        int cxDIB;
        int cyDIB; //引入了一个新的类CMemDC。
CMemDC dc(pDC);
CSunyardBarDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
BeginWaitCursor();
HDIB hDIB = pDoc->GetHDIB();
if (hDIB != NULL)
{
LPSTR lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) hDIB);
cxDIB = (int) ::DIBWidth(lpDIB);         // Size of DIB - x
cyDIB = (int) ::DIBHeight(lpDIB);        // Size of DIB - y
::GlobalUnlock((HGLOBAL) hDIB);
CRect rcDIB;
rcDIB.top = rcDIB.left = 0;
rcDIB.right = cxDIB;
rcDIB.bottom = cyDIB;
CRect rcDest;
rcDest.left = rcDIB.left*pDoc->m_ZoomFactor;
rcDest.top = rcDIB.top*pDoc->m_ZoomFactor;
rcDest.right = rcDIB.right*pDoc->m_ZoomFactor;
rcDest.bottom = rcDIB.bottom*pDoc->m_ZoomFactor;
::PaintDIB(dc.m_hDC, &rcDest, pDoc->GetHDIB(),
&rcDIB, pDoc->GetDocPalette());
POINT p ;
p.x = m_rectCrop.left;
p.y = m_rectCrop.top;
dc.MoveTo(p);
p.x = m_rectCrop.right ;
dc.LineTo (p);
p.y = m_rectCrop.bottom ;
dc.LineTo (p);
p.x = m_rectCrop.left ;
dc.LineTo (p);
p.y = m_rectCrop.top ;
dc.LineTo (p);
CRect cp=CRect(0,0,0,0);
int w;
if (cp.right>rcDest.right) {
w = cp.right;
}
else
w = rcDest.right;
int H;
if (cp.bottom >rcDest.bottom)
{
H = cp.bottom;
}
else
H = rcDest.bottom;
SetScrollSizes(MM_TEXT,CSize(w,H ));
//画识别区域的线条.
if((bIsSetProperty))
{
            DrawBarcodeRegion(&dc);
}
}
CRect rcDest;
CSize size = GetDocument()->GetDocSize();
rcDest.top = rcDest.left = 0;
if(pDoc->m_bFitWindow)
{
CRect rect;
GetClientRect(&rect);
pDoc->m_ZoomFactor = (float)rect.Width()/cxDIB;
if(cyDIB*pDoc->m_ZoomFactor>rect.Height())
{
pDoc->m_ZoomFactor = (float)rect.Height()/cyDIB;
}
}
rcDest.bottom = size.cy * pDoc->m_ZoomFactor;
rcDest.right = size.cx* pDoc->m_ZoomFactor; SetScrollSizes(MM_TEXT,CSize(rcDest.right,rcDest.bottom)); EndWaitCursor();
}注意其中我是通过改变缩放系数m_ZoomFactor来改变图象大小的先用GetDocument()->GetDocSize获得文档的大小然后将其放大。放大后一滚动条,就速度出奇慢,请大家帮助解决,谢谢。我用CMemDC来代替了CDC来绘图。可是没有一点效果。