c++ 如何使用打印机

fingerling6 2009-04-18 01:03:14
如题
...全文
4648 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ericming200409 2009-04-18
  • 打赏
  • 举报
回复
mfc
my9011 2009-04-18
  • 打赏
  • 举报
回复
 VisualC6.0是开发Windows应用强大工具但是要通过它实现打印功能直是初学者个难点经常有朋友询问如何在VC中实现打印功能他们往往感到在MFC提供框架内实现这个问题很复杂不知道如何下手本例针对这个问题介绍种简单思路方法实现文字串打印功能,读者朋友可以在此基础上稍微改动下就可以实现文件、图像打印功能

  、实现思路方法

  在Windows操作系统下显示器、打印机和绘图仪都被视为输出设备正常情况下系统默认输出设备是显示器要使用打印机,首先需要创建个指向打印机设备环境句柄,然后通过该句柄相关绘图把所需文字和图形输出至打印机上当打印结束后,删除这个设备环境句柄即可

  当Windows系统中安装好打印机后系统总是自动设置个打印机为系统默认打印机,在Windows启动配置文件Win.ini中[window]段中列出了带有关键字device默认打印机下面是某机器中Win.ini中[Windows]字段内容:

[windows]
load=
run=
NullPort=None
device=HPLaserJet4050(computer000),HPBFDB1,LPT1

  在上述关键字device后串中包含了系统中默认打印机 3个重要属性它们依次是打印机设备名HPLaserJet4050(computer000)驱动名是HPBFDB1输出端口为LPT1

  为了操纵系统默认打印机实现打印功能在中可APIGetProfileString()从Win.ini文件中获得device这个设备串该原型为:DWORDGetProfileString(LPCTSTRlpAppName,LPCTSTRlpKeyName,LPCTSTRlpDefault,LPTSTRlpReturnedString,DWORDnSize)中lpAppName参数为所要检索Win.ini文件中字段名;lpKeyName为字段中关键字名;lpDefault为默认串;lpReturnedString为检索到串如果该没有从lpKeyName关键字中检索到相应串则kpRetrunedString返回默认串lpDefault;nSize为返回串长度

  获取上述串后再使用strtok()将该串进行分解,获得和打印机相关 3个属性,作为APICreateDC()创建打印机设备环境句柄参数CreateDC()如果成功,则为默认打印机创建个设备环境句柄,否则返回个空值(NULL)该原形为:HDCCreateDC(LPCTSTRlpszDriver,LPCTSTRlpszDevice,LPCTSTRlpszOutput,CONSTDEVMODE*lpinitData)该前 3个参数恰好对应打印机 3个属性最后个参数为化打印机驱动数据般情况下该参数设置为NULL就可以了

  在具体打印过程中StartDoc(HDChdc,CONSTDOCINFO*lpdi)来开始个打印任务其中参数lpdi为个指向DOCINFO结构指针该结构如下:

typedefstruct{
 cbSize;//结构尺寸大小;
 LPCTSTRlpszDocName;//文档名字;
 LPCTSTRlpszOutput;//输出文档名般情况下为NULL;
 LPCTSTRlpszDatatype;//用来记录打印过程数据类型般情况下为NULL;
 DWORDfwType;//用来支持打印工作额外信息般情况下为NULL;
}DOCINFO,*LPDOCINFO;

  开始个打印任务后再StartPage(hdcpr)让打印机走纸通知打印机有文档将要打印;接下来工作就是输出数据了这部分工作对于开发人员来说就象往计算机屏幕上输出文字、图像样容易只不过是计算机根据当前设备环境句柄自动将数据输出到打印机罢了数据打印完后需要作些善后处理工作使用RestoreDC(hdcpr,-1)恢复打印机设备句柄、EndPage(hdcpr)让打印机停止打印最后EndDoc(hdcpr)结束上述打印作业 [Page]

   2、编程步骤

  1、启动VisualC6.0新建个基于对话框应用Test在对话框窗体中加入个按钮(Button),设置这个Button属性:ID=IDC_PRINT,CAPTION=\"打印\";

  2、使用ClassWizard类向导为该按钮添加个鼠标单击处理OnPr()

  3、修改TestDlg.cpp文件中OnPr();

  4、添加代码编译运行 3、代码

////////////////////////////////////////////
voidCTestDlg::OnPr
{
 charszprer[80];
 char*szDevice,*szDriver,*szOutput;
 HDChdcpr;//定义个设备环境句柄
 //定义个打印作业
 DOCINFOdi={(DOCINFO),\"prer\",NULL};
 //得到设备串存入szprer中
 GetProfileString(\"windows\",\"device\",\",,,\",szprer,80);
 //将设备串分解
 (NULL!=(szDevice=strtok(szprer,\",\"))&&NULL!=(szDriver=strtok(NULL,\",\"))&&
NULL!=(szOutput=strtok(NULL,\",\")))
  //创建个打印机设备句柄
  ((hdcpr=CreateDC(szDriver,szDevice,szOutput,NULL))!=0)
  {
   (StartDoc(hdcpr,&di)>0)//开始执行个打印作业
   {
    StartPage(hdcpr);//打印机走纸,开始打印
    SaveDC(hdcpr);//保存打印机设备句柄
    //输出行文字
    TextOut(hdcpr,1,1,\"热烈祝贺编程例子出版发行!\",16);
    RestoreDC(hdcpr,-1);//恢复打印机设备句柄
    EndPage(hdcpr);//打印机停纸,停止打印
    EndDoc(hdcpr);//结束个打印作业
    MessageBox(\"打印完毕!\",\"提示\",MB_ICONINFORMATION);
   }
   //用APIDeleteDC销毁个打印机设备句柄
   DeleteDC(hdcpr);


  }
  
  {
   MessageBox(\"没有默认打印机,或者没有安装打印机!\");
   ;
  }
 }

jackyjkchen 2009-04-18
  • 打赏
  • 举报
回复
看Windows程序设计吧,一两句话貌似说不清楚,除非你用MFC

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧