OnDraw(CDC*pDC)
{
HBITMAPbitmap;
HBITMAPoldbitmap;
CDCmemdc;CRectrect;
if(FileName==\"\")bitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(),NULL,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION);
else
bitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(),FileName,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
memdc.CreateCompatibleDC(pDC);
GetClientRect(rect);
oldbitmap=(HBITMAP)memdc.SelectObject(bitmap);
pDC-BitBlt(0,0,rect.Width(),rect.Height(),
memdc.SelectObject(oldbitmap);
//显示等待光标
BeginWaitCursor();
//获取文档
CCh1_1Doc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
//获取DIB
HDIBhDIB=pDoc-GetHDIB();
//判断DIB是否为空
if(hDIB!=NULL)
{
LPSTRlpDIB=(LPSTR)::GlobalLock((HGLOBAL)hDIB);
//获取DIB宽度
intcxDIB=(int)::DIBWidth(lpDIB);
//获取DIB高度
intcyDIB=(int)::DIBHeight(lpDIB);
::GlobalUnlock((HGLOBAL)hDIB);
CRectrcDIB;
rcDIB.top=rcDIB.left=0;
rcDIB.right=cxDIB;
rcDIB.bottom=cyDIB;
CRectrcDest;
//判断是否是打印
if(pDC-IsPrinting())
{
//是打印,计算输出图像的位置和大小,以便符合页面
//获取打印页面的水平宽度(象素)
intcxPage=pDC-GetDeviceCaps(HORZRES);
//获取打印页面的垂直高度(象素)
intcyPage=pDC-GetDeviceCaps(VERTRES);
//获取打印机每英寸象素数
intcxInch=pDC-GetDeviceCaps(LOGPIXELSX);
intcyInch=pDC-GetDeviceCaps(LOGPIXELSY);
//计算打印图像大小(缩放,根据页面宽度调整图像大小)
rcDest.top=rcDest.left=0;
rcDest.bottom=(int)(((double)cyDIB*cxPage*cyInch)
/((double)cxDIB*cxInch));
rcDest.right=cxPage;
//计算打印图像位置(垂直居中)
inttemp=cyPage-(rcDest.bottom-rcDest.top);
rcDest.bottom=temp/2;
rcDest.top=temp/2;
}
else
//非打印
{
//不必缩放图像
rcDest=rcDIB;
}
//输出DIB
::PaintDIB(pDC-m_hDC,GetHDIB(),
GetDocPalette());
}
//恢复正常光标
EndWaitCursor();
}
|