在打印机的输出与屏幕的输出不一致。WHY????????????????????
:在我的程序中,在ScrollView中加入了消息映射。
ON_COMMAND(ID_FILE_PRINT, CScrollView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CScrollView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CScrollView::OnFilePrintPreview)
OnPrepareDC()函数 ,OnPreparePrinting(),视图的OnDraw()函数
分别如下:
在OnPrepareDC()函数如下:
void CEx07bScrollView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo)
{
// TODO: Add your specialized code here and/or call the base class
CScrollView::OnPrepareDC(pDC, pInfo);
pDC->SetMapMode(MM_ANISOTROPIC);
//转换坐标映射方式
CSize size = CSize(800, 580);
pDC->SetWindowExt(size);
//确定窗口大小
//得到实际设备每逻辑英寸的像素数量
int xLogPixPerInch=pDC->GetDeviceCaps(LOGPIXELSX);
int yLogPixPerInch = pDC->GetDeviceCaps(LOGPIXELSY);
//得到设备坐标和逻辑坐标的比例
long xExt = (long)size.cx * xLogPixPerInch/96 ;
long yExt = (long)size.cy * yLogPixPerInch/96 ;
pDC->SetViewportExt((int)xExt, (int)yExt);
//确定视口大小
}
OnPreparePrinting()函数如下:
BOOL CEx07bScrollView::OnPreparePrinting(CPrintInfo* pInfo)
{
// TODO: call DoPreparePrinting to invoke the Print dialog box
// return CScrollView::OnPreparePrinting(pInfo);
BOOL b=CView::DoPreparePrinting(pInfo);
return b;
}
视图的OnDraw()函数如下:
void CEx07bScrollView::OnDraw(CDC* pDC)
{
CEx07bDoc* pDoc = GetDocument();
// TODO: add draw code here
ASSERT_VALID(pDoc);
char str[64];
int i=1;
//Title Dispaly
pDC->TextOut(20,0,"第几项");
pDC->TextOut(90,0,"项目");
pDC->TextOut(175,0,"频数");
pDC->TextOut(240,0,"百分比");
pDC->TextOut(320,0,"累计百分比");
pDC->TextOut(180,20,"(次)");
pDC->TextOut(255,20,"(%)");
pDC->TextOut(355,20,"(%)");
POSITION pos=pDoc->m_dataList.GetHeadPosition();
while(pos!=NULL)
{
CStudent *pStudent=pDoc->m_dataList.GetNext(pos);
if(pos==pDoc->curPos||
(pos==NULL&&pDoc->curPos==pDoc->m_dataList.GetHeadPosition()))
pDC->TextOut(0,20*(i+1),"=>");
sprintf(str,"%d",i );
pDC->TextOut(30,20*(i+1),str);
sprintf(str,"%6.0f",pStudent->m_nCode);
pDC->TextOut(170,20*(i+1),str);
pDC->TextOut(90,20*(i+1),pStudent->m_sName);
sprintf(str,"%6.2f",pStudent->m_lAge);
pDC->TextOut(240,20*(i+1),str);
sprintf(str,"%6.2f",pStudent->m_lScore);
pDC->TextOut(340,20*(i+1),str);
i++;
}
}
也就是在打印机的输出与屏幕的输出不一致。WHY???