本文目的主要是通过这个小程序理解打印机调用过程。通过调用windowsAPI函数GetProfileString,获得当前计算机默认打印机信息,然后生成打印设备句柄,再调用TextOut函数通过打印设备句柄将文字信息输出打印机上。
//有关程序代码及详细注释见下:
//**********马上龙年春节了,祝所有看到本文的朋友们春节快乐!龙年大吉!*********
#include <windows.h>
#include <string>
using namespace std;
int Print(string str)
{
char szprinter[80];//用于存储打印相关信息
char *szDevice,*szDriver,*szOutput; //用于存储将上面信息解析后的信息
HDC hdcprint; // 定义一个打印设备句柄
//定义一个打印作业
static DOCINFO docinfo={sizeof(DOCINFO),"printer",NULL};
/*
关于DOCINFO结构体:
int cbSize - 结构体字节数
LPCTSTR lpszDocName - 指向指定文档名称的空终止字符串的指针
LPCTSTR lpszOutput - 指向指定输出文件名称的以空结尾的指针。如果此指针为 NULL,则输出将发送到
由传递给 StartDoc 函数的设备上下文句柄标识的设备。
LPCTSTR lpszDatatype - 指向指定用于记录打印作业的数据类型的空终止字符串的指针。此成员可以为
NULL。这里使用缺省值。
DWORD fwType - 指定有关打印作业的附加信息。此成员必须使用指定值。这里使用缺省值。
*/
GetProfileString("windows","device",",,,",szprinter,80);
//GetProfileString是WIN32 API函数,功能是检索与 Win.ini文件的指定节中的键关联的字符串。注意此函
//数只是为了与基于 16 位 Windows的应用程序兼容,其提取的信息应在注册表中。
//参数介绍:
//lpAppName -- 包含密钥的节的名称。
//lpKeyName -- 要检索其关联字符串的键的名称。
//lpDefault -- 默认字符串。如果在初始化文件中找不到lpKeyName键,函数会将默认字符串复制到lpReturnedString中。
//lpReturnedString -- 指向接收字符串的缓冲区的指针。
//nSize -- lpReturnedString 参数指向的缓冲区的大小(以字符为单位)。
szDevice=strtok(szprinter,",");
//功能:分解字符串为一组标记串。参1 要分解的字符串、参2 字符串中的分隔符。
//说明:首次调用时,参1必须指向要分解的字符串,随后再调用要把参1改成NULL。
szDriver=strtok(NULL,",");
szOutput=strtok(NULL,",");
if(szDevice&&szDriver&&szOutput)
{
if((hdcprint=CreateDC(szDriver,szDevice,szOutput,NULL))!=0) //生成打印设备句柄
{
if(StartDoc(hdcprint,&docinfo)>0) //开始执行一个打印作业
{
StartPage(hdcprint); //开始打印
SaveDC(hdcprint); //保存打印设备句柄
TextOutA(hdcprint,10,10,str.data(),str.length());
string temp= "打印完毕!";
TextOutA(hdcprint, 10, 200, temp.data(), temp.length());
RestoreDC(hdcprint, -1); //恢复打印设备句柄到最近由SaveDC函数保存的状态中
EndPage(hdcprint); //停止打印
EndDoc(hdcprint); //结束一个打印作业
MessageBox(NULL,"打印完毕!","提示",MB_ICONINFORMATION);
}
DeleteDC(hdcprint);// 销毁打印设备句柄
}
else{
MessageBox(NULL,"没有默认打印机,或者没有安装打印机!","消息",1);
return 0;
}
}
return 1;
}
int main()
{
string a="天津市位于渤海之滨,是一座美丽的城市!";
Print(a);
system("pause");
return 0;
}
//程序运行结果:(在打印机上输出)
//天津市位于渤海之滨,海河穿越其中,是一座美丽的城市!
//打印完毕!