小程序:windows下C++调用打印机过程简介

本文目的主要是通过这个小程序理解打印机调用过程。通过调用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;

}

//程序运行结果:(在打印机上输出)

//天津市位于渤海之滨,海河穿越其中,是一座美丽的城市!

//打印完毕!

相关推荐
初願致夕霞15 分钟前
Linux_进程
linux·c++
Thera7771 小时前
【Linux C++】彻底解决僵尸进程:waitpid(WNOHANG) 与 SA_NOCLDWAIT
linux·服务器·c++
Wei&Yan1 小时前
数据结构——顺序表(静/动态代码实现)
数据结构·c++·算法·visual studio code
呉師傅1 小时前
【使用技巧】Adobe Photoshop 2024调整缩放与布局125%后出现点菜单项漂移问题的简单处理
运维·服务器·windows·adobe·电脑·photoshop
wregjru1 小时前
【QT】4.QWidget控件(2)
c++
浅念-1 小时前
C++入门(2)
开发语言·c++·经验分享·笔记·学习
小羊不会打字1 小时前
CANN 生态中的跨框架兼容桥梁:`onnx-adapter` 项目实现无缝模型迁移
c++·深度学习
Max_uuc1 小时前
【C++ 硬核】打破嵌入式 STL 禁忌:利用 std::pmr 在“栈”上运行 std::vector
开发语言·jvm·c++
近津薪荼2 小时前
dfs专题4——二叉树的深搜(验证二叉搜索树)
c++·学习·算法·深度优先
游戏开发爱好者82 小时前
日常开发与测试的 App 测试方法、查看设备状态、实时日志、应用数据
android·ios·小程序·https·uni-app·iphone·webview