打印程序HELLOWORLD

#include<windows.h>

HDC GetPrinterDC(void)
{
	PRINTER_INFO_4 * pi;
	DWORD pcbNeed,pcReturned;
	EnumPrinters(PRINTER_ENUM_LOCAL,NULL,4,NULL,0,&pcbNeed,&pcReturned);//用于返回需要为这个类型4返回的结果体分配的内存字节数
	pi=(PRINTER_INFO_4 *)malloc(pcbNeed);
	EnumPrinters(PRINTER_ENUM_LOCAL,NULL,4,(PBYTE)pi,pcbNeed,&pcbNeed,&pcReturned);//将返回信息存储在pi中
	HDC hdc=CreateDC(NULL,pi->pPrinterName,NULL,NULL);
	if(hdc==NULL)
		return NULL;
	free(pi);//注意养成好习惯释放内存
	return hdc;
}

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    LPSTR lpszCmdLine, int iCmdShow)
{
	static DOCINFO di={0};
	di.cbSize=sizeof(DOCINFO);
	di.lpszDocName=TEXT("test");
	
	HDC hdcPrint=GetPrinterDC();

	if(hdcPrint!=NULL)
	{
		if(StartDoc(hdcPrint,&di)>0)
		{
			if(StartPage(hdcPrint)>0)
			{
				Rectangle(hdcPrint,20,20,500,400);
				TextOut(hdcPrint,240,190,TEXT("这是我的第一个打印程序"),sizeof("这是我的第一个打印程序"));
				EndPage(hdcPrint);
				EndDoc(hdcPrint);
			}
			DeleteDC(hdcPrint);
		}
	}
     return 0 ;
}
安装的虚拟打印机是SmartPrinter
后面出现的奇怪字符还不知道为什么?有知道的可以留言一下,谢谢


对于上面出现问题的解决

这个问题是由于前后使用的字符不一样导致的,前面是宽字符集wchar_t*,后面是char*类型计算的,所以

更改如下

TextOut(hdcPrint,240,190,TEXT("这是我的第一个打印程序"),sizeof(TEXT("这是我的第一个打印程序"))/2);

因为一个Unicode字符是两个字节的,所以这里要除以2


这样,后面出现的奇怪字符就不会出现了

如果未使用unicode字符,那么

TextOut(hdcPrint,240,190,TEXT("this is my first printer hello world"),sizeof("this is my first printer hello world"));

不用除以2就可以完整打印,而不会出现奇怪字符

好了,HelloWord到此打印结束


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值