VC打印机使用 win95环境的下例子测试

最近用到打印机编程,需要实现直接获取打印机打印,打印机获取是根据名字。于是查找了一些资料。下面的例子被转发了多次。

我现在xp下看到win.ini里没有这个打印机的配置了。

于是我引用” 

VC枚举本地所有的打印机

http://blog.csdn.net/thanklife/article/details/23482643“的枚举打印机的方法,来获取到LPPRINTER_INFO_2 pPrinters;根据其就得到CreatDC的参数。然后就可以执行后面的打印工作了


PS:又查看这篇文章决定测试一下代码,竟然可以工作。那么win.ini里面没有这个打印机的配置项,到底是哪个配置文件里面有这个打印机的配置项?又搜索了一些配置文件,还是没有找到。到底是哪个文件有这个配置项呢?2014-4-16


*************************下面的是转发*********************************************************************

打印机编程(简单) vc++

VC 5.0是开发Windows 95下应用程序的强大工具。本文将通过一 
个具体实例讨论用VC打印文字和图形的一些技术。在Windows 95下, 
显示器和打印机、绘图仪都被视为输出设备。系统默认的输出设备是 
显示器。要使用打印机,首先需要创建一个指向打印机的设备环境句柄, 
然后通过该句柄调用相关的绘图函数把所需的文字和图形输出至打印 
机上。当打印结束后,删除这个设备环境句柄即可。 

一、技术细节 

当我们在Windows95下安装好打印机后,总是需要设置一个为默认 
打印机,在Windows95的启动配置文件WIN.INI中[window]段中列出了 
带有关键字device的默认打印机。如果在文件WIN.INI中有如下几行: 

[windows] 
[其他程序行] 

device=EPSON LQ-1600K,EPSON24,LPT1: 


在device后的字符串中就包含了系统中默认的打印机的三个重要 
属性.它们依次是打印机的设备名是LQ-1600K,驱动程序名是EPSON24, 
输出端口为LPT1。在程序中我们可调用API函数GetProfileString从 
WIN.INI文件中获得这个设备字符串。再将这个设备字符串进行分解, 
获得这三个属性,作为参数用API函数CreateDC调用。如果调用成功, 

则为默认打印机创建一个设备环境句柄,否则返回一个空值(NULL)。 


CreateDC函数的原形如下: 


HDC CreateDC( 
LPCTSTR lpszDriver, 
LPCTSTR lpszDevice, 
LPCTSTR lpszOutput, 
CONST DEVMODE *lpinitData 
); 


二、程序代码及说明 


新建一个名为Test的工程,窗体类型为对话框(Dialog based) 
模式。在窗体中加入一个按钮(Button),设置这个Button的属性: 
ID=IDC_PRINT,CAPTION="打印"。在类向导中找到该Button 
的单击事件对应的消息BN_CLICKED,增加其成员函数OnPrint。

在TestDlg.cpp文件中找到OnPrint函数并作如下改动。 

void CTestDlg::OnPrint() 
{ 
	// 增加如下代码 
	char szprinter[80]; 
	char *szDevice,*szDriver,*szOutput; 
	HDC hdcprint; // 定义一个设备环境句柄 	
	
	//定义一个打印作业 
	Static DOCINFO di={sizeof(DOCINFO),"printer",NULL}; 
	
	
	// 得到设备字符串存入数组szprinter中 
	GetProfileString("windows","device",",,,",szprinter,80); 
	// 将设备字符串分解 
	if(NULL!=(szDevice=strtok(szprinter,","))&& 
		NULL!=(szDriver=strtok(NULL,","))&& 
		NULL!=(szOutput=strtok(NULL,","))) 
	{	
		// 创建一个打印机设备句柄 
		if((hdcprint=CreateDC(szDriver,szDevice,szOutput,NULL))!=0) 
		{ 
			if(StartDoc(hdcprint,&di)>0) //开始执行一个打印作业 
			{ 
				StartPage(hdcprint); //打印机走纸,开始打印 
				SaveDC(hdcprint); //保存打印机设备句柄 
				// 输出一行文字 
				TextOut(hdcprint,1,1,"这是一个例子",12); 
				// 输出一条直线 
				MoveToEx(hdcprint,20,20,NULL); 				
				LineTo(hdcprint,120,120); 				
				RestoreDC(hdcprint,-1); //恢复打印机设备句柄				
				EndPage(hdcprint); //打印机停纸,停止打印				
				EndDoc(hdcprint); //结束一个打印作业 				
				MessageBox("打印完毕!","提示",MB_ICONINFORMATION);				
			} 			
			// 用API函数DeleteDC销毁一个打印机设备句柄			
			DeleteDC(hdcprint);			
		} 		
		else			
		{ 			
			MessageBox("没有默认打印机,或者没有安装打印机!"); 			
			return; 			
		}
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

零点零一

您的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值