在MFC使用打印机相对简单,此处不多说,现看看在控制台下如何使用打印功能。

获取所有的打印机:

struct print
{CString  mDriverName;CString  mDeviceName;CString  mDevicePort;
};vector<print>  mPrints;void  GetPrinters()
{DWORD            dwFlags = PRINTER_ENUM_FAVORITE | PRINTER_ENUM_LOCAL;LPPRINTER_INFO_2 pPrinters;DWORD            cbPrinters;DWORD            cReturned;int               i;//// get byte count needed for buffer, alloc buffer, the enum the printers////先获取打印机数量EnumPrinters (dwFlags, NULL, 2, NULL, 0, &cbPrinters,&cReturned);if (!(pPrinters = (LPPRINTER_INFO_2) LocalAlloc (LPTR, cbPrinters + 4))){goto done_refreshing;}//获取打印机,填充到数组if (!EnumPrinters (dwFlags, NULL, 2, (LPBYTE) pPrinters,cbPrinters, &cbPrinters, &cReturned)){goto done_refreshing;}//提取打印机信息,包括驱动名、打印机名、端口名if (cReturned > 0){   for (i= 0; i < cReturned;  i++){//// for each printer in the PRINTER_INFO_2 array: build a string that//   looks like "DEVICE_NAME;PORT;DRIVER_NAME"//print p;p.mDriverName.Append((pPrinters + i)->pDriverName);p.mDeviceName.Append((pPrinters + i)->pPrinterName);p.mDevicePort.Append((pPrinters + i)->pPortName);mPrints.push_back(p);}}done_refreshing:LocalFree (LocalHandle (pPrinters));
}

使用打印机:

打开打印机,并创建打印机DC:

wchar_t szPrinter[MAX_PATH];DWORD cchPrinter(ARRAYSIZE(szPrinter));//GetDefaultPrinter(szPrinter, &cchPrinter);wcscpy(szPrinter, gSystemConfig.mDeviceName.GetBuffer());OpenPrinter(szPrinter, &hdl, NULL);DWORD size = DocumentProperties(NULL, hdl, szPrinter, NULL, NULL, 0);devmode = (DEVMODE*)malloc(size);DocumentProperties(NULL, hdl, szPrinter, devmode, NULL, DM_OUT_BUFFER);HDC printerDC = CreateDC(L"WINSPOOL", szPrinter, NULL, devmode);

获取打印机的尺寸:

 width = GetDeviceCaps(printerDC, HORZRES);  height = GetDeviceCaps(printerDC, VERTRES);

这里获取的尺寸是以像素为单位的,所有,如果打印参数是按照实际尺寸的,那么需要根据打印分辨率将实际尺寸换算成像素,因为程序中是以像素为单位进行文本、图像等绘制。

获取打印机分辨率:

mDpi = GetDeviceCaps(printerDC, LOGPIXELSX);

打印设置:

 devmode->dmOrientation   = DMORIENT_PORTRAIT; //打印方向设置成纵向打印  devmode->dmPaperSize = DMPAPER_A4; 

打印参数设置之后需要调用:

ResetDC(printerDC, devmode);

生效。

开始文档,开始一页

 StartDoc(printerDC, &info);StartPage(printerDC);

结束一页:

EndPage(printDC);

在开始一页和结束一页之间根据排版,绘制内容。这里与窗口中绘制内容无异,不多说。

打印结束之后:

 EndDoc(printerDC);DeleteDC(printerDC);ClosePrinter(hdl);free(devmode);

关闭文档、打印机。

这里使用打印机只获取打印机的名称就可以了。

win32中使用打印机相关推荐

  1. Win32 API 枚举打印机

    主要是使用EnumPrinters函数: #include <windows.h> #include <Winspool.h>int APIENTRY WinMain(HINS ...

  2. delphi选择打印机:Delphi中获取打印机设备

    delphi选择打印机:Delphi中获取打印机设备名和端口名 疯狂代码 http://www.CrazyCoder.cn/ :http:/www.CrazyCoder.cn/Delphi/Artic ...

  3. 如何“干净地”终止 Win32 中的应用程序

    如何"干净地"终止 Win32 中的应用程序 察看这篇文章对应的产品 文章 ID : 178893 最后更新日期 : 2004年11月25日 版本 : 2.2 本页内容 概要 更多 ...

  4. 在Win32中使用OpenGL

    在Win32下使用OpenGL http://blog.csdn.net/t_w_s/article/details/11021357    1.win32程序的框架是winMain+WndProc. ...

  5. 在计算机上怎么搜共享打印机,如何共享电脑中的打印机?共享电脑打印机步骤...

    原标题:如何共享电脑中的打印机?共享电脑打印机步骤 打印机是日常办公必备工具之一,而共享打印机是一种很常见的小型办公环境下使用打印机的办法,但很多网友却不知道如何共享电脑中的打印机,那要怎么操作呢?下 ...

  6. 计算机描述不可用步骤,Win10 1909系统中提示打印机描述不可用解决方法

    在使用电脑的时候经常会遇到各种难题,例如有些伙伴们说自己的电脑如何解决Win10电脑中打印机描述不可用的现象,像遇到这样的问题该如何解决呢?其实非常简单,对于Win10 1909系统中提示打印机描述不 ...

  7. 在XP中自定义打印机纸张大小

    在XP中自定义打印机纸张大小 一.问题描述: 在Windows 2000和Windows XP操作系统中,如何自定义纸张大小? 自定义纸张之后,为何在打印机属性的"纸张大小"中没有 ...

  8. win10计算机扫描,教你在win10电脑中打开打印机和扫描仪的方法

    我们在很多的系统的功能的操作中很多的小伙伴都是需要使用到办公软件打印机和扫描仪的,那在电脑中打印的时候是需要设置的,对于系统中的打印机和扫描仪是怎么实现打开的呢,对于这个在win10电脑中的疑问今天小 ...

  9. 烂泥:AD中有关打印机的研究……

    本着AD的建立是以公司的服务为本,特别是公司内部的各种办公设备,今天晚上终于AD中打印机的这块知识给补上了,下面就把这个实验内容贴出来供大家观摩和学习,不到之处,还请各位午饭们提出来哦-- 实验条件: ...

最新文章

  1. 总监调岗至前台,企业被判赔偿26万,法院:“侮辱性调岗”违法
  2. Truncate a string
  3. Matplotlib-barh-绘制水平条形图
  4. CRFsuite:CRF 工具包及sklearn-crfsuite
  5. iOS App开发的那些事儿1:如何建立合适的规范
  6. oracle 修改索引的名称,Oracle中查询索引名称,批量修改索引名称语句
  7. jquery.nicescroll完美滚动条使用方法
  8. 如何知道 CPU 是否支持虚拟化技术(VT)
  9. 扩展类载入器的载入问题
  10. Rabbitmq学习笔记008---AmqpException: No method found for class java.lang.String
  11. itextpdf添加表格元素_基操勿6第四期:PPT表格美化
  12. jeesit框架通过jBox获取弹窗信息
  13. 毕业设计 嵌入式 指纹识别考勤系统设计与实现
  14. OpenERP QWeb模板标签笔记
  15. 史上最全的安卓WebView之WebSettings说明
  16. Linux系统打印机打印乱码,Linux输入中文乱码问题(亲测有效)
  17. POI DataValidation 删除数据有效性验证
  18. OpenWrt的SR9000有线网卡驱动
  19. 程序员PS技能(四):程序员创建PSD文件、展示简单PSD设计流程,上传PSD至蓝湖,并下载Demo切图
  20. know, know abou, and konw of

热门文章

  1. 武装突袭3fps服务器不稳定,《武装突袭3》深不见底:史上最硬核、最复杂的FPS游戏...
  2. vertical-align 属性、浮动(2)
  3. 商业研究(14):出境游和自由行,接机-送机-包车-当地玩乐
  4. G口大带宽是什么意思?G口服务器如何合理使用?
  5. 如何将数字转换成对应的字母?
  6. 飞歌viper4android,ViPer4android. FX顶级音效!
  7. 申宝公司-A股开门红落空
  8. 什么是端口转发?什么是端口映射?如何设置端口映射?
  9. 【转】全球第一经典语录,每天读一遍
  10. 生育保险之报销、津贴、产假