C++打印图片的方法
来源:互联网 发布:数据库查询去除重复 编辑:程序博客网 时间:2024/06/15 13:29
方法一: 使用shell执行
保存要打印的文件(可能是C:\),并使用ShellExecute发送打印命令
ShellExecute(0, "print", "C:\\MyImageFile.png", NULL, NULL, SW_SHOWNORMAL);
方法二: 使用打印机设备上下文
1. 初始化打印机DC
2. 在 DC上绘制图像
3.关闭DC。
参考: https://msdn.microsoft.com/en-us/library/dd183521(VS.85).aspx
创建打印机设备上下文
应用程序可以通过几种不同的方式创建打印机DC:
- 通过调用PrintDlg函数显示一个通用对话框,允许用户指定打印机选项,然后使用这些选项创建打印机DC。
- 通过使用GetDefaultPrinter和GetPrinter函数中的默认打印机数据创建打印机DC 。
- 通过使用Win.ini文件中的默认打印机数据创建打印机DC。
注意 不再推荐这种方式。
本节包含演示第二种方法的代码。
TCHAR szDriver [16] = _T(“WINSPOOL”); TCHAR szPrinter [256]; DWORD cchBuffer = 255; HDC hdcPrint = NULL; HANDLE hPrinter = NULL; PRINTER_INFO_2 * pPrinterData; BYTE pdBuffer [16384]; BOOL bReturn = FALSE; DWORD cbBuf = sizeof(pdBuffer); DWORD cbNeeded = 0; pPrinterData =(PRINTER_INFO_2 *)&pdBuffer [0]; //获取默认打印机名称 bReturn = GetDefaultPrinter( szPrinter, &cchBuffer); if(bReturn){ //打开默认打印机 bReturn = OpenPrinter( szPrinter, &hPrinter, 空值); } if(bReturn){ //获取打印机端口名称 bReturn = GetPrinter( hPrinter, 2, &pdBuffer [0], cbBuf, &cbNeeded); //这个句柄不再需要了 ClosePrinter(hPrinter); } if(bReturn){ //创建打印DC hdcPrint = CreateDC(szDriver,szPrinter, pPrinterData-> pPortName,NULL); } if(hdcPrint){ //打印包含该字符串的测试页 //“打印机测试”在左上角。 Escape(hdcPrint,STARTDOC,8,“Test-Doc”,NULL); TextOut(hdcPrint,50,50,_T(“PRINTER TEST”),12); Escape(hdcPrint,NEWFRAME,0,NULL,NULL); Escape(hdcPrint,ENDDOC,0,NULL,NULL); //删除打印机DC。 DeleteDC(hdcPrint); }
本节包含演示最后一个方法的代码。
要使用默认打印机,请从Win.ini文件中检索并解析相应的字符串。该字符串通过调用GetProfileString函数并指定适当的部分和条目名称来检索。在默认打印机的情况下,该数据存储在[windows]部分中,并由名为device的条目标识。Win.ini文件下面摘录的第七行显示了柯达Diconix打印机的条目。
[视窗] 负荷= 运行= 蜂鸣= YES 后台处理程序= YES NullPort =无 设备= Diconix,WINSPOOL,LPT1: CoolSwitch = 1 边框宽度= 3 KeyboardSpeed = 31 InitialKeyboardIndicators = 2 CursorBlinkRate = 530 DoubleClickSpeed = 686 程序= com exe bat pif cmd 文件= DeviceNotSelectedTimeout = 15 TransmissionRetryTimeout = 45 swapdisk = NetWarn = 1 fPromptOnVerbose = FALSE fPromptOnWarning = FALSE fPromptOnError = TRUE fPrintVerbose = FALSE fPrintFileLine = FALSE SHELL = ScreenSaveTimeOut = 300 ScreenSaveActive = 0 DebugOptions = 2048
以下示例显示如何使用Win.ini中的数据创建打印机DC。
HDC hdcPrint; //打印机直流手柄 TCHAR szDevString [120]; //数组为WIN.INI数据 TCHAR * szPrinter,* szDriver; //打印机和驱动程序名称 TCHAR * szPort; //端口名称 TCHAR * nextChar; //检索打印机,打印机驱动程序和 //从WIN.INI输出端口名称。 GetProfileString(_T(“windows”),_T(“device”),_T(“,,,”), szDevString,120); //解析名字串,根据需要设置ptrs //如果字符串包含所需的名称,请使用它们 //创建设备上下文。 if((szPrinter = _tcstok_s(szDevString, _T(“,”),&nextChar)) &&(szDriver = _tcstok_s(NULL, _T(“,”),&nextChar)) &&(szPort = _tcstok_s(NULL, _T(“,”),&nextChar))) { hdcPrint = CreateDC(szDriver,szPrinter, szPort,NULL); } //打印包含该字符串的测试页 //“打印机测试”在左上角。 Escape(hdcPrint,STARTDOC,8,“Test-Doc”,NULL); TextOut(hdcPrint,50,50,_T(“PRINTER TEST”),12); Escape(hdcPrint,NEWFRAME,0,NULL,NULL); Escape(hdcPrint,ENDDOC,0,NULL,NULL); //删除打印机DC。 DeleteDC(hdcPrint);
阅读全文
0 0
- C++打印图片的方法
- C:打印菱形(自己的方法)
- C/S模式下的打印方法
- C语言打印字符串的一部分的方法
- C/C++ 打印文件名、行号、函数名的方法
- Android中C/C++打印堆栈的方法
- C语言打印菱形的两种方法
- c和C++的调试打印输出方法
- C/C++ 打印文件名、行号、函数名的方法 .
- C/C++ 打印文件名、行号、函数名的方法
- C语言打印菱形的几种方法
- 【c语言】条形图星号打印学生成绩的方法
- .NET(C#)中图片的下载方法
- linux C 打印方法集锦
- 堆栈打印的方法
- 打印的方法
- log的打印方法
- LabVIEW的打印方法
- 自旋锁与互斥锁之抉择
- Python高阶函数
- 最大子序列和
- Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
- 虚拟机性能检测和故障处理工具
- C++打印图片的方法
- 利用unity + visual studio 自制一款小游戏
- String s=new String("xyz")及String s="a"+"b"+"c"+"d";创建几个String对象的问题
- 欢迎使用CSDN-markdown编辑器
- apache 服务
- Dijkstra算法 Atcoder-070-D
- 什么情况下会用到try-catch
- Android异步消息处理机制
- CF Round #428( Div.2)BCDE