📄 subject_29935.htm
字号:
<p>
序号:29935 发表者:极品飞车 发表日期:2003-02-18 21:34:16
<br>主题:在现有的程序中如何添加代码实现打印功能
<br>内容:我想在自己的MFC生成的程序中添加打印功能.谢谢!!!
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:bird 回复日期:2003-02-19 08:54:24
<br>内容:看看:<BR><BR>http://www.swm.com.cn/yingyong/rj-99-yy9/99-9-1.htm
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:金枪鱼 回复日期:2003-02-20 00:57:14
<br>内容:看看这个无视图打印函数,或许有帮助<BR><BR>//打印函数<BR>//s为要打印的字符串(本函数会自动在其最后添加一个换行符号"\n")<BR><BR>void CA××××::MyPrint(int Startx,int Starty,CString s)<BR>{<BR> CDC dc;<BR> CPrintDialog printDlg(FALSE,PD_ALLPAGES|PD_HIDEPRINTTOFILE); <BR> if(IDCANCEL==printDlg.DoModal()) <BR> {<BR> DeleteDC(dc.Detach()); <BR> return;<BR> }<BR><BR> dc.Attach(printDlg.GetPrinterDC());<BR> DOCINFO Info; <BR> Info.cbSize = sizeof(DOCINFO);<BR> Info.lpszDocName = "鼎码科技"; Info.lpszOutput = NULL;<BR> Info.lpszDatatype = NULL;<BR> Info.fwType = 0;<BR> <BR> dc.StartDoc(&Info); //通知打印机驱动程序执行一新的<BR> //打印任务(并不具体打印,而是写入缓冲区准备打印)<BR> //成功返回正数,否则为-1<BR> <BR> dc.StartPage();//通知打印机驱动程序打印新页<BR>//映射模式选择<BR> dc.SetMapMode(MM_HIMETRIC);//设置当前影射模式为:单位0.01毫米<BR> <BR> <BR> CRect rectPrint(0, 0,<BR> dc.GetDeviceCaps(HORZRES),//返回设备的.以象素为单位的物理显示宽度 <BR> dc.GetDeviceCaps(VERTRES)//返回设备的.以象素为单位的物理显示高度<BR> );<BR> dc.DPtoLP(&rectPrint);//设备物理单位转化为逻辑单位<BR> dc.SetWindowOrg(0, -rectPrint.bottom);//设置原点<BR> <BR><BR>//字体设置<BR> <BR> //构造三种字体, CFont font,font1,font2;<BR> LOGFONT lf,lf1,lf2;<BR> //清理逻辑字体的设置<BR> memset(&lf,0,sizeof(LOGFONT));<BR> memset(&lf1,0,sizeof(LOGFONT));<BR> memset(&lf2,0,sizeof(LOGFONT));<BR> //定义正文逻辑字体的属性<BR> lf.lfHeight=110; <BR> lf.lfWidth=0;//缺省 <BR> ........<BR><BR> VERIFY(font.CreatePointFontIndirect(&lf,&dc));<BR> VERIFY(font1.CreatePointFontIndirect(&lf1,&dc));<BR> VERIFY(font2.CreatePointFontIndirect(&lf2,&dc));<BR><BR>// 创建画笔来画表格和线<BR><BR> CPen myPen1,myPen2;<BR> myPen1.CreatePen(PS_SOLID,25,RGB(0,0,0));<BR> myPen2.CreatePen(PS_SOLID,60,RGB(0,0,0));<BR> //设置字体的缺省原点<BR>dc.SetTextAlign(TA_TOP|TA_LEFT);//缺省<BR><BR>//打出头部<BR> CFont* old_font=dc.SelectObject(&font1);<BR> CString strPageHeader=_T("鼎码科技");<BR> //计算这个字符串字符所在的长宽<BR> CSize sizeHeader=dc.GetTextExtent(strPageHeader,strPageHeader.GetLength());<BR> //将这个字符串放在中间的矩形框中对中打印<BR> CRect rectHeader;<BR> rectHeader.left=(rectPrint.right-sizeHeader.cx)/2;<BR> rectHeader.top= -rectPrint.bottom;<BR> rectHeader.right=(rectPrint.right-sizeHeader.cx)/2+sizeHeader.cx;<BR> rectHeader.bottom=-rectPrint.bottom-sizeHeader.cy;<BR> dc.DrawText(strPageHeader,<BR> strPageHeader.GetLength(),<BR> rectHeader,<BR> DT_CENTER|DT_SINGLELINE<BR> );<BR>//在打出的页头文本下面画两根线<BR> CPen *pOldPen=dc.SelectObject(&myPen1);//选择画笔1,并保留原来的画笔<BR> dc.MoveTo(rectHeader.left,rectHeader.bottom-100);<BR> dc.LineTo(rectHeader.right,rectHeader.bottom-100);<BR> dc.SelectObject(&myPen2);//选择画笔2<BR> dc.MoveTo(rectHeader.left,rectHeader.bottom-230);<BR> dc.LineTo(rectHeader.right,rectHeader.bottom-230);<BR> //画笔使用完毕,恢复缺省画笔<BR> dc.SelectObject(pOldPen);//恢复原来的画笔<BR><BR>//打印页脚<BR> dc.SelectObject(&font2);//选择字体,这里不保留上面已经调用字体font1<BR> CString strPageEnd=_T("鼎码科技");<BR> CSize sizePageEnd=dc.GetTextExtent(strPageEnd,strPageEnd.GetLength());<BR> CPoint pointPageEnd;<BR> pointPageEnd.x=rectPrint.right-sizePageEnd.cx-100;<BR> pointPageEnd.y=sizePageEnd.cy+50;<BR> dc.TextOut(pointPageEnd.x,pointPageEnd.y,strPageEnd);<BR><BR>//打印正文<BR> dc.SelectObject(&font);//选择字体<BR> <BR>int index;<BR> CSize size;<BR> int x = Startx;<BR> int y = Starty;<BR> size = dc.GetTextExtent("00", 2);<BR> while((index = s.Find("\n")) != -1)<BR> {<BR> ss = s.Left(index); if(ss.Find("\r") != -1)<BR> ss = s.Left(index-1);<BR> s = s.Mid(index+1); dc.TextOut(x, y, ss);//打印到缓冲区<BR> y -= size.cy;//减小Y座标<BR> }<BR> <BR> dc.SelectObject(old_font); //恢复原来的字体<BR> font.DeleteObject(); <BR> font1.DeleteObject();<BR> font2.DeleteObject();//删除字体<BR> myPen1.DeleteObject();<BR> myPen2.DeleteObject();//删除画笔<BR> <BR> dc.EndPage(); //通知打印机驱动程序页结束<BR> dc.EndDoc();//通知打印机驱动程序打印完毕(缓冲区写入完毕,具体打印开始)<BR> DeleteDC(dc.Detach()); //删除打印机DC<BR> return;<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 + -