📄 subject_17143.htm
字号:
<p>
序号:17143 发表者:VC 发表日期:2002-10-08 20:37:29
<br>主题:打印问题
<br>内容:我设置纸张宽度为297mm 高度210mm 而打印机的最大打印宽度为254mm,当有内容超出254mm时就打印不出来,我用的时A4纸.我试用Word等产品都可以打出超出254mm的内容<BR>!请各位高手给我一个答案!!!!!在线等候,先感谢了
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:徐景周 回复日期:2002-10-09 11:50:53
<br>内容:如果打印字符可以参看下面源码:<BR>你应该获取打印设备当前大小后,计算出你的纸张大小,再在你的纸张中绘图或写字既可。如下:<BR>void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo)<BR>{<BR> BeginWaitCursor();<BR><BR> // 确定打印机的输出范围大小(设备显示范围)<BR> CSize size = GetDocument()->GetMap().GetPaperSize();<BR> m_szPrint.cx = pDC->GetDeviceCaps(HORZSIZE) * 10- m_rcPrintMargin.left - m_rcPrintMargin.right;<BR> m_szPrint.cy = pDC->GetDeviceCaps(VERTSIZE) * 10- m_rcPrintMargin.top - m_rcPrintMargin.bottom;<BR> if ( m_szPrint.cx <= 0 || m_szPrint.cy <= 0 )<BR> return ;<BR> <BR> size.cx = int(size.cx * m_PrintSc); // 确定输出图幅大小<BR> size.cy = int(size.cy * m_PrintSc);<BR> m_hPage = size.cx / m_szPrint.cx; // 确定图件水平分幅数<BR> m_hPage += (size.cx % m_szPrint.cx) ? 1 : 0;<BR> if ( m_hPage == 0 ) m_hPage = 1;<BR> m_vPage = size.cy / m_szPrint.cy; // 确定图件垂直分幅数<BR> m_vPage += (size.cy % m_szPrint.cy) ? 1 : 0;<BR><BR> EndWaitCursor();<BR><BR> // 提示用户打印的页数<BR> int nPaperNum = m_hPage * m_vPage;<BR> CString szNote;<BR> szNote.Format("需要打印纸: %d 页\n\t(X 方向: %d页 , Y 方向: %d页)\n",<BR> nPaperNum, m_hPage, m_vPage);<BR> AfxMessageBox(szNote,MB_ICONINFORMATION);<BR><BR> pInfo->SetMinPage(1); // 设置打印页数<BR> pInfo->SetMaxPage( nPaperNum );<BR> pInfo->m_nNumPreviewPages = 1; // 设置打印预览的页数为1<BR><BR>}<BR><BR>void OnPrint(CDC* pDC, CPrintInfo* pInfo) <BR>{<BR> OnPrepareDC(pDC);<BR><BR> int hPageNum = (pInfo->m_nCurPage - 1) % m_hPage; // 当前打印页的水平页数<BR> int vPageNum = (m_vPage -1) - (pInfo->m_nCurPage - 1) / m_hPage; // 当前打印页的垂直页<BR><BR> double tmpSc = m_dViewScale;<BR> m_dViewScale = m_PrintSc; // 设置当前的输出比例<BR><BR><BR> // 内边框<BR> CRect tmpRect;<BR><BR> // 确定图件输出的有效范围<BR> tmpRect.left = int(m_rcPrintRange.left * m_PrintSc + m_szPrint.cx * hPageNum);<BR><BR> tmpRect.top = int((m_rcPrintRange.top * m_PrintSc) + m_szPrint.cy * vPageNum );<BR><BR> // 整幅打印时或正常打印页数为一页时,为了使TOP正确定位为图件有效高度顶部(窗口原点应偏上),<BR> // 否则,正常打印时(大于一页时),正确定位TOP值(窗口原点应偏下),jingzhou xu,2002.8.1<BR> CSize Mapsize = GetDocument()->GetMap().GetPaperSize();<BR> static MapOffset=0;<BR> if((m_bPrintZoomAll && tmpRect.top < m_szPrint.cy ) || pInfo->GetMaxPage() == 1) <BR> tmpRect.top += (m_szPrint.cy - tmpRect.top); // 一页时,设BOTTOM在图纸尾部位置<BR> else if(!m_bPrintZoomAll) // 多页时,设TOP为图纸顶部位置<BR> {<BR> if(vPageNum == (m_vPage -1))<BR> MapOffset = abs(Mapsize.cy* m_PrintSc - tmpRect.top);<BR><BR> tmpRect.top -= MapOffset;<BR> }<BR><BR> tmpRect.right = tmpRect.left + m_szPrint.cx;<BR> tmpRect.bottom = tmpRect.top - m_szPrint.cy;<BR><BR><BR> CPoint ptDrawOrg;<BR> ptDrawOrg.x = tmpRect.left; // 确定输出的原点坐标<BR> ptDrawOrg.y = tmpRect.top;<BR><BR> // 使整幅打印时,图形居中显示,jingzhou xu<BR>// ptDrawOrg -= m_Movement;<BR>// tmpRect -= m_Movement;<BR> ptDrawOrg.x -= m_Movement.cx;<BR> tmpRect.left -= m_Movement.cx;<BR> tmpRect.right -= m_Movement.cx;<BR><BR><BR> // 确定左边、顶边所留空白的设备坐标大小<BR> pDC->SetMapMode(MM_LOMETRIC);<BR> CSize size = CSize(m_rcPrintMargin.left *10, m_rcPrintMargin.top *10);<BR> pDC->HIMETRICtoDP(&size);<BR> pDC->SetViewportOrg(size.cx ,size.cy ); // 设置新的设备坐标原点<BR> pDC->SetWindowOrg(ptDrawOrg);<BR><BR> <BR> CRect rectInter(tmpRect);<BR><BR><BR> // 确定设置坐标参数后的有效绘图区域<BR> size.cx = abs(pInfo->m_rectDraw.Width());<BR> size.cy = abs(pInfo->m_rectDraw.Height());<BR> pInfo->m_rectDraw.SetRect(rectInter.left, rectInter.top,<BR> rectInter.left + size.cx, rectInter.top - size.cy);<BR><BR> pInfo->m_rectDraw -= CSize(m_rcPrintMargin.left, -m_rcPrintMargin.top);<BR> ....<BR>}
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -