CMyDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc);
BOOL
bPrinting = pDC->IsPrinting();
float
zoom=pDoc->GetZoomFactor();
CPoint
scrollPoint = GetScrollPosition();
m_isScroll
=FALSE;
if
(scrollPoint.x!=m_lastScroll.x || scrollPoint.y!=m_lastScroll.y)
{
m_isScroll
= TRUE;
}
CRect
rcClient;
GetClientRect(&rcClient);
if
(m_sizeChange || m_isScroll || m_isDraw || pDoc->m_isZoomed)
{
if(pDoc->BlockHandle(scrollPoint,rcClient,zoom)==FALSE)
{
return;
}
pDoc->m_isZoomed
= FALSE;
m_isDraw
=FALSE;
m_sizeChange
= FALSE;
m_lastScroll
= scrollPoint;
}
int
nWidth,nHeight;
nWidth
= pDoc->m_pBitmapInfo->bmiHeader.biWidth;
nHeight
= pDoc->m_pBitmapInfo->bmiHeader.biHeight;
CDC
MemDC; //首先定义一个显示设备对象
CBitmap
MemBitmap,*pOldBitmap; //定义一个位图对象
//建立与屏幕显示兼容的内存显示设备
MemDC.CreateCompatibleDC(pDC);
//创建一与pDC兼容的位图,大小为整个客户区
MemBitmap.CreateCompatibleBitmap(pDC,nWidth,nHeight);
//将位图选入内存环境
pOldBitmap=MemDC.SelectObject(&MemBitmap);
//先用背景色将位图清除干净
MemDC.FillSolidRect(0,0,nWidth,nHeight,RGB(255,255,255));
//使DC的整个客户区都成无效区
MemDC.SelectClipRgn(NULL);
//再“与上”检取的无效区,使内存环境与pDC检取的无效区相等
MemDC.IntersectClipRect(rcClient);
SetStretchBltMode(MemDC.m_hDC,BLACKONWHITE|WHITEONBLACK);
if
(!bPrinting && m_brHatch.m_hObject){
rcClient.right =
max(rcClient.right , m_totalDev.cx);
rcClient.bottom
= max(rcClient.bottom, m_totalDev.cy);
m_brHatch.UnrealizeObject();
CPoint
pt(0, 0);
MemDC.LPtoDP(&pt);
pt
= MemDC.SetBrushOrg(pt.x % 8, pt.y % 8);
// CBrush*
old = MemDC.SelectObject(&m_brHatch);
m_brHatch.CreateStockObject(NULL_BRUSH);
CBrush*
old = (CBrush*)MemDC.SelectObject(&m_brHatch);
MemDC.FillRect(&rcClient,
&m_brHatch);
MemDC.SelectObject(old);
}
if
(pDoc->m_poDataset) {
if
(pDoc->m_tool==ID_Tfw_bGcpNew) {
for
(int i=0;ivTfwGcps.size();i++) {
CMyDoc::GcpImxyGcpXY&gcp=pDoc->vTfwGcps[i];
CPoint
point=toGui(gcp.X,gcp.Y);
pDC->MoveTo(point.x-2,point.y );
pDC->LineTo(point.x+2,point.y );
pDC->MoveTo(point.x ,point.y-2);
pDC->LineTo(point.x ,point.y+2);
}
}
if
(!bPrinting) {
StretchDIBits(MemDC.m_hDC,0,0,nWidth,nHeight,0,0,nWidth,nHeight,pDoc->m_pDataBasic,
pDoc->m_pBitmapInfo,DIB_RGB_COLORS,SRCCOPY);
pDC->BitBlt(scrollPoint.x,scrollPoint.y,nWidth,nHeight,&MemDC,0,0,SRCCOPY);
MemDC.SelectObject(pOldBitmap);
MemBitmap.DeleteObject();
MemDC.DeleteDC();
if
( m_tracker.m_rect.Width()>0 && m_tracker.m_rect.Height()>0 )
m_tracker.Draw(pDC);
}

被折叠的 条评论
为什么被折叠?



