⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_17143.htm

📁 一些关于vc的问答
💻 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>&nbsp;&nbsp;&nbsp;&nbsp;BeginWaitCursor();<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;// 确定打印机的输出范围大小(设备显示范围)<BR>&nbsp;&nbsp;&nbsp;&nbsp;CSize size = GetDocument()-&gt;GetMap().GetPaperSize();<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_szPrint.cx = pDC-&gt;GetDeviceCaps(HORZSIZE) * 10- m_rcPrintMargin.left - m_rcPrintMargin.right;<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_szPrint.cy = pDC-&gt;GetDeviceCaps(VERTSIZE) * 10- m_rcPrintMargin.top - m_rcPrintMargin.bottom;<BR>&nbsp;&nbsp;&nbsp;&nbsp;if ( m_szPrint.cx &lt;= 0 || m_szPrint.cy &lt;= 0 )<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return ;<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;size.cx = int(size.cx * m_PrintSc);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 确定输出图幅大小<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;size.cy = int(size.cy * m_PrintSc);<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_hPage = size.cx / m_szPrint.cx;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 确定图件水平分幅数<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_hPage += (size.cx % m_szPrint.cx) ? 1 : 0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;if ( m_hPage == 0 )&nbsp;&nbsp;m_hPage = 1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_vPage = size.cy / m_szPrint.cy;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 确定图件垂直分幅数<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_vPage += (size.cy % m_szPrint.cy) ? 1 : 0;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;EndWaitCursor();<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;// 提示用户打印的页数<BR>&nbsp;&nbsp;&nbsp;&nbsp;int nPaperNum = m_hPage * m_vPage;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CString&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;szNote;<BR>&nbsp;&nbsp;&nbsp;&nbsp;szNote.Format("需要打印纸: %d 页\n\t(X 方向: %d页 , Y 方向: %d页)\n",<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nPaperNum, m_hPage, m_vPage);<BR>&nbsp;&nbsp;&nbsp;&nbsp;AfxMessageBox(szNote,MB_ICONINFORMATION);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;pInfo-&gt;SetMinPage(1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 设置打印页数<BR>&nbsp;&nbsp;&nbsp;&nbsp;pInfo-&gt;SetMaxPage( nPaperNum );<BR>&nbsp;&nbsp;&nbsp;&nbsp;pInfo-&gt;m_nNumPreviewPages = 1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 设置打印预览的页数为1<BR><BR>}<BR><BR>void OnPrint(CDC* pDC, CPrintInfo* pInfo) <BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;OnPrepareDC(pDC);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;hPageNum = (pInfo-&gt;m_nCurPage - 1) % m_hPage;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 当前打印页的水平页数<BR>&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;vPageNum = (m_vPage -1) - (pInfo-&gt;m_nCurPage - 1) / m_hPage;&nbsp;&nbsp;&nbsp;&nbsp;// 当前打印页的垂直页<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpSc = m_dViewScale;<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_dViewScale = m_PrintSc;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 设置当前的输出比例<BR><BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;// 内边框<BR>&nbsp;&nbsp;&nbsp;&nbsp;CRect&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpRect;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;// 确定图件输出的有效范围<BR>&nbsp;&nbsp;&nbsp;&nbsp;tmpRect.left&nbsp;&nbsp; = int(m_rcPrintRange.left * m_PrintSc + m_szPrint.cx * hPageNum);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;tmpRect.top&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = int((m_rcPrintRange.top * m_PrintSc) + m_szPrint.cy * vPageNum );<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;// 整幅打印时或正常打印页数为一页时,为了使TOP正确定位为图件有效高度顶部(窗口原点应偏上),<BR>&nbsp;&nbsp;&nbsp;&nbsp;// 否则,正常打印时(大于一页时),正确定位TOP值(窗口原点应偏下),jingzhou xu,2002.8.1<BR>&nbsp;&nbsp;&nbsp;&nbsp;CSize Mapsize = GetDocument()-&gt;GetMap().GetPaperSize();<BR>&nbsp;&nbsp;&nbsp;&nbsp;static MapOffset=0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;if((m_bPrintZoomAll && tmpRect.top &lt; m_szPrint.cy ) || pInfo-&gt;GetMaxPage() == 1) <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpRect.top += (m_szPrint.cy - tmpRect.top);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 一页时,设BOTTOM在图纸尾部位置<BR>&nbsp;&nbsp;&nbsp;&nbsp;else if(!m_bPrintZoomAll)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 多页时,设TOP为图纸顶部位置<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(vPageNum == (m_vPage -1))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MapOffset = abs(Mapsize.cy* m_PrintSc - tmpRect.top);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpRect.top -= MapOffset;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;tmpRect.right&nbsp;&nbsp;= tmpRect.left + m_szPrint.cx;<BR>&nbsp;&nbsp;&nbsp;&nbsp;tmpRect.bottom = tmpRect.top - m_szPrint.cy;<BR><BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;CPoint&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ptDrawOrg;<BR>&nbsp;&nbsp;&nbsp;&nbsp;ptDrawOrg.x = tmpRect.left;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 确定输出的原点坐标<BR>&nbsp;&nbsp;&nbsp;&nbsp;ptDrawOrg.y = tmpRect.top;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;// 使整幅打印时,图形居中显示,jingzhou xu<BR>//&nbsp;&nbsp;&nbsp;&nbsp;ptDrawOrg&nbsp;&nbsp;-= m_Movement;<BR>//&nbsp;&nbsp;&nbsp;&nbsp;tmpRect -= m_Movement;<BR>&nbsp;&nbsp;&nbsp;&nbsp;ptDrawOrg.x -= m_Movement.cx;<BR>&nbsp;&nbsp;&nbsp;&nbsp;tmpRect.left -= m_Movement.cx;<BR>&nbsp;&nbsp;&nbsp;&nbsp;tmpRect.right -= m_Movement.cx;<BR><BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;// 确定左边、顶边所留空白的设备坐标大小<BR>&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;SetMapMode(MM_LOMETRIC);<BR>&nbsp;&nbsp;&nbsp;&nbsp;CSize size = CSize(m_rcPrintMargin.left *10, m_rcPrintMargin.top *10);<BR>&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;HIMETRICtoDP(&size);<BR>&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;SetViewportOrg(size.cx ,size.cy );&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 设置新的设备坐标原点<BR>&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;SetWindowOrg(ptDrawOrg);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CRect rectInter(tmpRect);<BR><BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;// 确定设置坐标参数后的有效绘图区域<BR>&nbsp;&nbsp;&nbsp;&nbsp;size.cx = abs(pInfo-&gt;m_rectDraw.Width());<BR>&nbsp;&nbsp;&nbsp;&nbsp;size.cy = abs(pInfo-&gt;m_rectDraw.Height());<BR>&nbsp;&nbsp;&nbsp;&nbsp;pInfo-&gt;m_rectDraw.SetRect(rectInter.left, rectInter.top,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rectInter.left + size.cx, rectInter.top - size.cy);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;pInfo-&gt;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 + -