电视盒系统下载:如何用VC编写代码控制打印纸张的大小?

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/27 22:41:34
关于一楼的回答:PRINTER_INFO_2 是什么啊?这个函数怎么无法通过编译?
还有,这个函数中第三个参数是干什么的啊?

BOOL SetupPrinter(int PaperWidth,int PaperLength,int Orientation)
{
DWORD Errno,buf[2000],len=sizeof(PRINTER_INFO_2);
PRINTER_INFO_2 pinfo2;
TCHAR PrinterName[128];
HANDLE Printer;
LPDEVMODE lpmod;
DEVMODE devmod;
PRINTDLG pda;
PRINTER_DEFAULTS pDefault;

memset(&pda,0,sizeof(pda));
pda.lStructSize = sizeof(pda);
//PD_RETURNDEFAULT使之获得默认打印机的设置且不显示对话框
pda.Flags = PD_RETURNDEFAULT|PD_ALLPAGES | PD_USEDEVMODECOPIES | PD_NOPAGENUMS | PD_HIDEPRINTTOFILE | PD_NOSELECTION;
PrintDlg(&pda); // 获得缺省打印机设置
Errno=GetLastError();
if(Errno==ERROR_SUCCESS){
if (pda.hDevMode !=NULL){
lpmod = (LPDEVMODE)GlobalLock(pda.hDevMode);
strcpy(PrinterName,(char *)lpmod->dmDeviceName );//获得缺省打印机名字
GlobalUnlock(pda.hDevMode);
}
}
else{
return false;
}

memset(&pDefault,0,sizeof(pDefault));
memset(&devmod,0,sizeof(devmod));
memset(&pinfo2,0,sizeof(pinfo2));
pDefault.DesiredAccess =PRINTER_ALL_ACCESS;
OpenPrinter(PrinterName,&Printer,&pDefault);
Errno=GetLastError();
if(Errno)
return false;

GetPrinter(Printer,2,(BYTE *)buf,sizeof(buf),&len);
if(Errno)
return false;
else{
memcpy((void *)&pinfo2,buf,sizeof(pinfo2));
pinfo2.pDevMode->dmPaperWidth = PaperWidth;
pinfo2.pDevMode->dmPaperLength = PaperLength;
pinfo2.pDevMode->dmOrientation = Orientation;
}

SetPrinter(Printer,2,(unsigned char *)&pinfo2,NULL);
Errno=::GetLastError();
if(Errno)
return false;

ClosePrinter(Printer);
return true;
}