电视盒系统下载:如何用VC编写代码控制打印纸张的大小?
来源:百度文库 编辑:查人人中国名人网 时间:2024/04/27 22:41:34
还有,这个函数中第三个参数是干什么的啊?
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;
}