打印时怎样控制打印的文档在页面上的合适位置?换页时又该怎样控制? 打印时怎样控制打印的文档在页面上的合适位置?如果打印的文档大于一页,怎样处理换页时让文档在和第一页合适的位置? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果不是用控件,你就要在ONPRINT中自己画了。 自己画时想必要用到Rect,这时你控制一下Rect的Top和bottom就可以了。 你可以建立一个打印区RECT,此区的宽度就是你每行信息的宽度,高度可以自已设。然后用DC的DrawText("xxxx",RECT,....)来画这行,这样你的行高就可以自已控制。每画完一行后,将此RECT的值向下移动一行,即Rect.top = rect.bottom,rect.bottom += 行高。当你发现移到最后rect.bottom大于可打印的区域就换页。如果想在每页的开头空一部分,则可将第一行的Rect.top值赋的大点 有控制换页的命令吗我是采用跟踪y坐标,当y大于一页高度时让y+100来定下一页开头空白宽度为100,这样第二页成功,而第三页就不行了为什么? 把代码贴出来 ,基本上给出了详细解释,还请各位高手指点到底那出错了,导致楼上所说出的错误! int position,tPosition;//position表示页的纵坐标 tPostition用来控制是否要换页tPosition=position=110;//留出110宽的空白页头int nPage=0;//nPage表示页数//////////////画出表格////////////while(!m_pRecordset->adoEOF){ //判断边缘tPosition=tPosition+240;//因为下面每画表格position都要占用240宽度,因此先tPosition下移240 if(tPosition>=2880)//2880是事先已经获取的页高,这里判断是否改换页了{ nPage++;//表示页数要增加一页了 position=nPage*2880+110;//设置下一页开始打印的位置 tPosition=110;//恢复tPosition }//写表头DrawTableHead(pDC,position);//再position处输出表头//写数据position=position+110;//由于写表头占用了110宽,所以position+110DrawData(pDC,position,m_pRecordset);//再在position处输出表单内容position=position+130;//输出内容占了130宽,position+130m_pRecordset->MoveNext();//记录下移} 我不太清楚你是否用的是MFC的打印机制,你上面的代码是在哪里调的,如果你是在OnPrint中画的,并且用DC的SetMaxPage设置过最大页,则系统会根据最大的页数重复调用OnPrint函数,因此你想换页只需让OnPrint返回即可。至于页数你即然知道了每行的高度、页的高度、报表头的高度、行数,我想应该可以算的出来。 自己搞定!原来是漏写了改为if(tPosition>=2880)//2880是事先已经获取的页高,这里判断是否改换页了{ nPage++;//表示页数要增加一页了 position=nPage*2880+110;//设置下一页开始打印的位置 tPosition=110+240;//!此处错了,少加了240 }不过还是要谢谢vc_boy了 在点击关闭窗口按钮,怎么发送一个广播消息 Visual C++6.0中使用的vector出现的问题,请教高手,请教所有了解的朋友! 问个窗口消息的问题 如何拖拉鼠标画直线,同时可以在鼠标处显示当前坐标的tip? 送分啦,快来啊!!!分不够再加!!! 简单问题,请指教,在线等 为什么RGB三者的值显示不一样 急急急----- 有谁做过lzh,用java, c , vb 都可以 两个list control控件响应同一个事件 我自己用vc做了个控件,为什么放到网页里客户端不能自动下载? 关于内存映射文件的问题,很奇怪…………………… 请教COM/ATL高手!!!!(急)
然后用DC的DrawText("xxxx",RECT,....)来画这行,这样你的行高就可以自已控制。每画完一行后,将此RECT的值向下移动一行,即Rect.top = rect.bottom,
rect.bottom += 行高。
当你发现移到最后rect.bottom大于可打印的区域就换页。
如果想在每页的开头空一部分,则可将第一行的Rect.top值赋的大点
有控制换页的命令吗我是采用跟踪y坐标,当y大于一页高度时让y+100来定下一页开头空白宽度为100,这样第二页成功,而第三页就不行了
为什么?
tPosition=position=110;//留出110宽的空白页头
int nPage=0;//nPage表示页数//////////////画出表格////////////while(!m_pRecordset->adoEOF)
{
//判断边缘
tPosition=tPosition+240;//因为下面每画表格position都要占用240宽度,因此先tPosition下移240
if(tPosition>=2880)//2880是事先已经获取的页高,这里判断是否改换页了
{ nPage++;//表示页数要增加一页了
position=nPage*2880+110;//设置下一页开始打印的位置
tPosition=110;//恢复tPosition
}
//写表头
DrawTableHead(pDC,position);//再position处输出表头
//写数据
position=position+110;//由于写表头占用了110宽,所以position+110
DrawData(pDC,position,m_pRecordset);//再在position处输出表单内容
position=position+130;//输出内容占了130宽,position+130
m_pRecordset->MoveNext();//记录下移
}
如果你是在OnPrint中画的,并且用DC的SetMaxPage设置过最大页,则系统会根据最大的页数重复调用OnPrint函数,因此你想换页只需让OnPrint返回即可。至于页数你即然知道了每行的高度、页的高度、报表头的高度、行数,我想应该可以算的出来。
改为
if(tPosition>=2880)//2880是事先已经获取的页高,这里判断是否改换页了
{ nPage++;//表示页数要增加一页了
position=nPage*2880+110;//设置下一页开始打印的位置
tPosition=110+240;//!此处错了,少加了240
}
不过还是要谢谢vc_boy了