📄 csdn_文档中心_vc下打印机的使用.htm
字号:
<DIV align=center>
<CENTER>
<TABLE border=0 cellPadding=6 width="90%">
<TBODY>
<TR>
<TD width="100%"><FONT size=3></FONT>
<P><SPAN class=dealft>VC 5.0是开发Windows
95下应用程序的强大工具。本文将通过一</SPAN></P>
<P><SPAN class=dealft>个具体实例讨论用VC打印文字和图形的一些技术。在Windows
95下,</SPAN></P>
<P><SPAN
class=dealft>显示器和打印机、绘图仪都被视为输出设备。系统默认的输出设备是</SPAN></P>
<P><SPAN
class=dealft>显示器。要使用打印机,首先需要创建一个指向打印机的设备环境句柄,</SPAN></P>
<P><SPAN
class=dealft>然后通过该句柄调用相关的绘图函数把所需的文字和图形输出至打印</SPAN></P>
<P><SPAN class=dealft>机上。当打印结束后,删除这个设备环境句柄即可。</SPAN></P>
<P><SPAN class=dealft>一、技术细节</SPAN></P>
<P><SPAN
class=dealft>当我们在Windows95下安装好打印机后,总是需要设置一个为默认</SPAN></P>
<P><SPAN
class=dealft>打印机,在Windows95的启动配置文件WIN.INI中[window]段中列出了</SPAN></P>
<P><SPAN
class=dealft>带有关键字device的默认打印机。如果在文件WIN.INI中有如下几行:</SPAN></P>
<P> </P>
<P><SPAN class=dealft>[windows]</SPAN></P>
<P><SPAN class=dealft>[其他程序行]</SPAN></P>
<P><SPAN class=dealft>device=EPSON
LQ-1600K,EPSON24,LPT1:</SPAN></P>
<P><SPAN
class=dealft>在device后的字符串中就包含了系统中默认的打印机的三个重要</SPAN></P>
<P><SPAN
class=dealft>属性.它们依次是打印机的设备名是LQ-1600K,驱动程序名是EPSON24,</SPAN></P>
<P><SPAN
class=dealft>输出端口为LPT1。在程序中我们可调用API函数GetProfileString从</SPAN></P>
<P><SPAN
class=dealft>WIN.INI文件中获得这个设备字符串。再将这个设备字符串进行分解,</SPAN></P>
<P><SPAN
class=dealft>获得这三个属性,作为参数用API函数CreateDC调用。如果调用成功,</SPAN></P>
<P><SPAN
class=dealft>则为默认打印机创建一个设备环境句柄,否则返回一个空值(NULL)。</SPAN></P>
<P><SPAN class=dealft>CreateDC函数的原形如下:</SPAN></P>
<P><SPAN class=dealft>HDC CreateDC(</SPAN></P>
<P><SPAN class=dealft>LPCTSTR lpszDriver,</SPAN></P>
<P><SPAN class=dealft>LPCTSTR lpszDevice,</SPAN></P>
<P><SPAN class=dealft>LPCTSTR lpszOutput,</SPAN></P>
<P><SPAN class=dealft>CONST DEVMODE *lpinitData</SPAN></P>
<P><SPAN class=dealft>);</SPAN></P>
<P><SPAN class=dealft>二、程序代码及说明</SPAN></P>
<P><SPAN class=dealft>新建一个名为Test的工程,窗体类型为对话框(Dialog
based)</SPAN></P>
<P><SPAN
class=dealft>模式。在窗体中加入一个按钮(Button),设置这个Button的属性:</SPAN></P>
<P><SPAN
class=dealft>ID=IDC_PRINT,CAPTION="打印"。在类向导中找到该Button</SPAN></P>
<P><SPAN
class=dealft>的单击事件对应的消息BN_CLICKED,增加其成员函数OnPrint。</SPAN></P>
<P><SPAN
class=dealft>在TestDlg.cpp文件中找到OnPrint函数并作如下改动。</SPAN></P>
<P><SPAN class=dealft>void CTestDlg::OnPrint()</SPAN></P>
<P><SPAN class=dealft>{</SPAN></P>
<P><SPAN class=dealft>// 增加如下代码</SPAN></P>
<P><SPAN class=dealft>char szprinter[80];</SPAN></P>
<P><SPAN class=dealft>char
*szDevice,*szDriver,*szOutput;</SPAN></P>
<P><SPAN class=dealft>HDC hdcprint; // 定义一个设备环境句柄</SPAN></P>
<P> </P>
<P><SPAN class=dealft>//定义一个打印作业</SPAN></P>
<P><SPAN class=dealft>Static DOCINFO
di={sizeof(DOCINFO),"printer",NULL}; </SPAN></P>
<P> </P>
<P><SPAN class=dealft>// 得到设备字符串存入数组szprinter中</SPAN></P>
<P><SPAN
class=dealft>GetProfileString("windows","device",",,,",szprinter,80);
</SPAN></P>
<P><SPAN class=dealft>// 将设备字符串分解</SPAN></P>
<P><SPAN
class=dealft>if(NULL!=(szDevice=strtok(szprinter,","))&&</SPAN></P>
<P><SPAN
class=dealft>NULL!=(szDriver=strtok(NULL,","))&&</SPAN></P>
<P><SPAN
class=dealft>NULL!=(szOutput=strtok(NULL,",")))</SPAN></P>
<P><SPAN class=dealft>// 创建一个打印机设备句柄 </SPAN></P>
<P><SPAN
class=dealft>if((hdcprint=CreateDC(szDriver,szDevice,szOutput,NULL))!=0)</SPAN></P>
<P><SPAN class=dealft>{</SPAN></P>
<P><SPAN class=dealft>if(StartDoc(hdcprint,&di)>0)
//开始执行一个打印作业</SPAN></P>
<P><SPAN class=dealft>{ </SPAN></P>
<P><SPAN class=dealft>StartPage(hdcprint);
//打印机走纸,开始打印</SPAN></P>
<P><SPAN class=dealft>SaveDC(hdcprint); //保存打印机设备句柄</SPAN></P>
<P><SPAN class=dealft>// 输出一行文字</SPAN></P>
<P><SPAN class=dealft>TextOut(hdcprint,1,1,"这是一个例子",12);
</SPAN></P>
<P><SPAN class=dealft>// 输出一条直线</SPAN></P>
<P><SPAN
class=dealft>MoveToEx(hdcprint,20,20,NULL);</SPAN></P>
<P><SPAN class=dealft>LineTo(hdcprint,120,120);</SPAN></P>
<P><SPAN class=dealft>RestoreDC(hdcprint,-1);
//恢复打印机设备句柄</SPAN></P>
<P><SPAN class=dealft>EndPage(hdcprint);
//打印机停纸,停止打印</SPAN></P>
<P><SPAN class=dealft>EndDoc(hdcprint); //结束一个打印作业</SPAN></P>
<P><SPAN
class=dealft>MessageBox("打印完毕!","提示",MB_ICONINFORMATION);</SPAN></P>
<P><SPAN class=dealft>}</SPAN></P>
<P><SPAN class=dealft>// 用API函数DeleteDC销毁一个打印机设备句柄 </SPAN></P>
<P><SPAN class=dealft>DeleteDC(hdcprint);</SPAN></P>
<P><SPAN class=dealft>}</SPAN></P>
<P><SPAN class=dealft>else</SPAN></P>
<P><SPAN class=dealft>{</SPAN></P>
<P><SPAN
class=dealft>MessageBox("没有默认打印机,或者没有安装打印机!");</SPAN></P>
<P><SPAN class=dealft>return;</SPAN></P>
<P><SPAN class=dealft>}</SPAN></P>
<P><SPAN class=dealft>}</SPAN></P>
<P><SPAN class=dealft>编译运行程序,出现如下窗体:</SPAN></P>
<P><IMG alt="wpe1.jpg (4927 bytes)" height=164 src=""
width=285></P>
<P><SPAN
class=dealft>在窗体中按下"打印"按钮,则打印机上会输出一行字"这是一个例子"。</SPAN></P>
<P><SPAN
class=dealft>然后再输出一条直线。在程序中使用了许多API函数,这些函数的具体用</SPAN></P>
<P><SPAN
class=dealft>法在VC5.0提供的帮助文件中都有详细的说明,有兴趣的读者不妨看一看。</SPAN></P>
<P> </P></TD></TR></TBODY></TABLE></CENTER></DIV>
<TABLE border=0 cellPadding=0 cellSpacing=0 width="100%">
<TBODY>
<TR>
<TD bgColor=#000080 width="100%"><SPAN class=dealft><IMG
height=1 src="CSDN_文档中心_VC下打印机的使用.files/dian.gif"
width=1></SPAN></TD></TR>
<TR>
<TD width="100%">
<DIV align=center>
<CENTER>
<TABLE border=0 cellPadding=0 width=100>
<TBODY>
<TR>
<TD bgColor=#000000 width="100%">
<P align=center><SPAN class=dealft><A
href="javascript:window.close()"><IMG border=0 height=24
src=""
width=72></A></SPAN></P></TD></TR></TBODY></TABLE></CENTER></DIV></TD></TR></TBODY></TABLE><BR></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><BR>
<TABLE align=center bgColor=#006699 border=0 cellPadding=0 cellSpacing=0
width=770>
<TBODY>
<TR bgColor=#006699>
<TD align=middle bgColor=#006699 id=white><FONT
color=#ffffff>对该文的评论</FONT></TD>
<TD align=middle>
<SCRIPT src="CSDN_文档中心_VC下打印机的使用.files/readnum.htm"></SCRIPT>
</TD></TR></TBODY></TABLE>
<TABLE align=center bgColor=#666666 border=0 cellPadding=2 cellSpacing=1
width=770>
<TBODY>
<TR>
<TD bgColor=#cccccc colSpan=3><SPAN style="COLOR: #cccccc"><IMG height=16
hspace=1 src="CSDN_文档中心_VC下打印机的使用.files/ico_pencil.gif" width=16>
</SPAN> zhizhi <I>(2001-2-27 16:40:07)</I> </TD></TR>
<TR>
<TD bgColor=#ffffff colSpan=3 width=532><BR>运行成功,但不知道为什么只打字,不能打印图形??
<BR></TD></TR></TBODY></TABLE>
<TABLE align=center bgColor=#666666 border=0 cellPadding=2 cellSpacing=1
width=770>
<TBODY>
<TR>
<TD bgColor=#cccccc colSpan=3><SPAN style="COLOR: #cccccc"><IMG height=16
hspace=1 src="CSDN_文档中心_VC下打印机的使用.files/ico_pencil.gif" width=16>
</SPAN> zhizhi <I>(2001-2-27 16:39:27)</I> </TD></TR>
<TR>
<TD bgColor=#ffffff colSpan=3 width=532><BR>运行成功,但不知道为什么不能打印图形??
<BR></TD></TR></TBODY></TABLE><BR>
<DIV align=center>
<TABLE align=center bgColor=#cccccc border=0 cellPadding=2 cellSpacing=1
width=770>
<TBODY>
<TR>
<TH bgColor=#006699 id=white><FONT
color=#ffffff>我要评论</FONT></TH></TR></TBODY></TABLE></DIV>
<DIV align=center>
<TABLE border=0 width=770>
<TBODY>
<TR>
<TD>你没有登陆,无法发表评论。 请先<A
href="http://www.csdn.net/member/login.asp?from=/Develop/read_article.asp?id=4844">登陆</A>
<A
href="http://www.csdn.net/expert/zc.asp">我要注册</A><BR></TD></TR></TBODY></TABLE></DIV><BR>
<HR noShade SIZE=1 width=770>
<TABLE border=0 cellPadding=0 cellSpacing=0 width=500>
<TBODY>
<TR align=middle>
<TD height=10 vAlign=bottom><A
href="http://www.csdn.net/intro/intro.asp?id=2">网站简介</A> - <A
href="http://www.csdn.net/intro/intro.asp?id=5">广告服务</A> - <A
href="http://www.csdn.net/map/map.shtm">网站地图</A> - <A
href="http://www.csdn.net/help/help.asp">帮助信息</A> - <A
href="http://www.csdn.net/intro/intro.asp?id=2">联系方式</A> - <A
href="http://www.csdn.net/english">English</A> </TD>
<TD align=middle rowSpan=3><A
href="http://www.hd315.gov.cn/beian/view.asp?bianhao=010202001032100010"><IMG
border=0 height=48 src="CSDN_文档中心_VC下打印机的使用.files/biaoshi.gif"
width=40></A></TD></TR>
<TR align=middle>
<TD vAlign=top>百联美达美公司 版权所有 京ICP证020026号</TD></TR>
<TR align=middle>
<TD vAlign=top><FONT face=Verdana>Copyright © CSDN.net, Inc. All rights
reserved</FONT></TD></TR>
<TR>
<TD height=15></TD>
<TD></TD></TR></TBODY></TABLE></DIV>
<DIV></DIV><!--内容结束//--><!--结束//--></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -