Hi:
最近遇到了一个困惑,如何将一个打印机的打印长度设置到3.2米以上。请大家指点:首先,对打印机设置打印尺寸可以通过SetPrinter API来完成。MSDN中SetPrinter函数的声明如下:
BOOL SetPrinter( HANDLE hPrinter, // handle to printer object
DWORD Level, // information level
LPBYTE pPrinter, // printer data buffer
DWORD Command // printer-state command
);
当Level参数的值为9时,pPrinter的值是一个PRINTER_INFO_9类型,PRINTER_INFO_9结构体的定义如下:
typedef struct _PRINTER_INFO_9 {
LPDEVMODE pDevMode;
} PRINTER_INFO_9, *PPRINTER_INFO_9;
结构体中存放的是指向DEVMODE结构体的指针,而DEVMODE结构中就有设置页面尺寸的字段,如下:
typedef struct _devicemode {
BCHAR dmDeviceName[CCHDEVICENAME];
WORD dmSpecVersion;
WORD dmDriverVersion;
WORD dmSize;
WORD dmDriverExtra;
DWORD dmFields;
union {
struct {
short dmOrientation;
short dmPaperSize;
short dmPaperLength;
short dmPaperWidth;
short dmScale;
short dmCopies;
short dmDefaultSource;
short dmPrintQuality;
};
POINTL dmPosition;
DWORD dmDisplayOrientation;
DWORD dmDisplayFixedOutput;
}; short dmColor;
short dmDuplex;
short dmYResolution;
short dmTTOption;
short dmCollate;
BYTE dmFormName[CCHFORMNAME];
WORD dmLogPixels;
DWORD dmBitsPerPel;
DWORD dmPelsWidth;
DWORD dmPelsHeight;
union {
DWORD dmDisplayFlags;
DWORD dmNup;
}
DWORD dmDisplayFrequency;
#if(WINVER >= 0x0400)
DWORD dmICMMethod;
DWORD dmICMIntent;
DWORD dmMediaType;
DWORD dmDitherType;
DWORD dmReserved1;
DWORD dmReserved2;
#if (WINVER >= 0x0500) || (_WIN32_WINNT >= 0x0400)
DWORD dmPanningWidth;
DWORD dmPanningHeight;
#endif
#endif /* WINVER >= 0x0400 */
} DEVMODE;
问: dmPaperLength 和 dmPaperWidth 是以1/10mm为单位的,而 dmPaperLength 和 dmPaperWidth定义的为short类型,其取值范围为 -32768 ~ 32767之间。因而可以得出每张纸的最大打印幅面为 宽:3.2767m * 高: 3.2767m。而市面上很多大幅面的打印机,单张可以打印到超过3米以上。对于超过32767这样的数据是如何正确的设置到打印机的呢?如Epson Stylus Pro 4880C,它的最大长度可以设置到15m。打印机操作系统 打打印机操作系统SetPrinterAPI
最近遇到了一个困惑,如何将一个打印机的打印长度设置到3.2米以上。请大家指点:首先,对打印机设置打印尺寸可以通过SetPrinter API来完成。MSDN中SetPrinter函数的声明如下:
BOOL SetPrinter( HANDLE hPrinter, // handle to printer object
DWORD Level, // information level
LPBYTE pPrinter, // printer data buffer
DWORD Command // printer-state command
);
当Level参数的值为9时,pPrinter的值是一个PRINTER_INFO_9类型,PRINTER_INFO_9结构体的定义如下:
typedef struct _PRINTER_INFO_9 {
LPDEVMODE pDevMode;
} PRINTER_INFO_9, *PPRINTER_INFO_9;
结构体中存放的是指向DEVMODE结构体的指针,而DEVMODE结构中就有设置页面尺寸的字段,如下:
typedef struct _devicemode {
BCHAR dmDeviceName[CCHDEVICENAME];
WORD dmSpecVersion;
WORD dmDriverVersion;
WORD dmSize;
WORD dmDriverExtra;
DWORD dmFields;
union {
struct {
short dmOrientation;
short dmPaperSize;
short dmPaperLength;
short dmPaperWidth;
short dmScale;
short dmCopies;
short dmDefaultSource;
short dmPrintQuality;
};
POINTL dmPosition;
DWORD dmDisplayOrientation;
DWORD dmDisplayFixedOutput;
}; short dmColor;
short dmDuplex;
short dmYResolution;
short dmTTOption;
short dmCollate;
BYTE dmFormName[CCHFORMNAME];
WORD dmLogPixels;
DWORD dmBitsPerPel;
DWORD dmPelsWidth;
DWORD dmPelsHeight;
union {
DWORD dmDisplayFlags;
DWORD dmNup;
}
DWORD dmDisplayFrequency;
#if(WINVER >= 0x0400)
DWORD dmICMMethod;
DWORD dmICMIntent;
DWORD dmMediaType;
DWORD dmDitherType;
DWORD dmReserved1;
DWORD dmReserved2;
#if (WINVER >= 0x0500) || (_WIN32_WINNT >= 0x0400)
DWORD dmPanningWidth;
DWORD dmPanningHeight;
#endif
#endif /* WINVER >= 0x0400 */
} DEVMODE;
问: dmPaperLength 和 dmPaperWidth 是以1/10mm为单位的,而 dmPaperLength 和 dmPaperWidth定义的为short类型,其取值范围为 -32768 ~ 32767之间。因而可以得出每张纸的最大打印幅面为 宽:3.2767m * 高: 3.2767m。而市面上很多大幅面的打印机,单张可以打印到超过3米以上。对于超过32767这样的数据是如何正确的设置到打印机的呢?如Epson Stylus Pro 4880C,它的最大长度可以设置到15m。打印机操作系统 打打印机操作系统SetPrinterAPI
解决方案 »
- 让CListCtrl的指定行指定列subItem字帖变粗体/斜体等
- 这是什么错误,VC
- 高薪征高手做广告后门木马程序
- 新建了一P2P群,2213761,欢迎对P2P有兴趣的朋友加入哦!
- 介绍一下安全技术?已成功抢注www.RSA.cn
- ATL写的COM+/COM怎样加入到Win2K的控制面板组件服务中去?
- 一个小问题请教(对话框)
- 在NT的服务中,能否使用ADO操作数据库?
- HeapAlloc分配的内存是不能移动的, 请问不能移动是什么意思呢?谢谢
- 答对送100分
- 帮我调试一下,看哪出问题了
- OCX控件不能在VC++6.0的Components And Controls Gallery对话框中列出,应该怎么办?
你可以搜搜看打印驱动如何做。