在打印机的输出与屏幕的输出不一致。WHY????????????????????

wxq888 2001-08-01 09:31:14
:在我的程序中,在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???
...全文
103 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
hanphy 2001-08-02
  • 打赏
  • 举报
回复
实际上在OnDraw()函数中调用
IsPrinting()判断一下是否是打印机输出就行了。
先求出打印机和屏幕输出的比例(忘了用哪个函数了,但可参考《Win98编程宝典》)
OnDraw()

if(IsPrinting())

将有关参数*比例,再输出

五行擒拿术 2001-08-02
  • 打赏
  • 举报
回复
我没看明白??到底什么不一样??是你打印出来的东西和屏幕上现实的不一样??
wxq888 2001-08-02
  • 打赏
  • 举报
回复
迫切需要来点人气吧!!!!!!!!!!!11

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧