为什么可以在虚拟打印成功,但在真实打印机下失败?请帮忙!
经过调试,发现错误出现在BitBlt()这个API上面,如果选择虚拟打印机则成功,但如果选择真实打印机,这个BitBlt()返回False,通过GetLastError得到的错误代码为87(传入的参数不正确)
这是怎么回事,有没有那位兄台遇到过类似情况?
另外我通过网上看到有人提到过这个BitBlt不适宜用在打印设备上,是这样吗?
我的代码是用SDK开发的.
代码如下:
HDC hdcPrint = MyPrint.GetDefaultPrinterDC(hDlg);//一个获取默认打印设备类
DOCINFO di;
di.cbSize = sizeof(DOCINFO);
di.lpszDocName = "NetWin Report";
di.lpszOutput = NULL;
di.lpszDatatype = NULL;
di.fwType = 0;
StartDoc(hdcPrint,&di); //通知打印机驱动程序执行一新的打印任务
SetMapMode(hdcPrint,MM_ANISOTROPIC);//(MM_HIENGLISH);//设置当前影射模式为:单位0.001英寸
SetWindowExtEx(hdcPrint,1024,768,NULL);
//得到实际设备每逻辑英寸的象素数量
int xLogPixPerInch = GetDeviceCaps(hdcPrint,LOGPIXELSX);
int yLogPixPerInch = GetDeviceCaps(hdcPrint,LOGPIXELSY);
//得到设备坐标和逻辑坐标的比例
long xExt = (long)1024 * xLogPixPerInch/96 ;
long yExt = (long)768 * yLogPixPerInch/96 ;
SetViewportExtEx(hdcPrint, (int)xExt, (int)yExt, NULL);
StartPage(hdcPrint);//通知打印机驱动程序打印新页
//这里的BitBlt()意思是实现所见即所得,将当前DC拷贝到打印DC里面
if(!BitBlt(hdcPrint, 20, 50, 1001, 655, GetDC(hDlg), 0,28, NOTSRCCOPY))
{
DWORD nErrorNo = GetLastError(); // 得到错误代码
LPSTR lpBuffer;
FormatMessage ( FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_IGNORE_INSERTS |
FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
nErrorNo, // 此乃错误代码,通常在程序中可由 GetLastError()得之
LANG_NEUTRAL,
(LPTSTR) & lpBuffer,
0 ,
NULL );
}
EndPage(hdcPrint); //通知打印机驱动程序页结束
EndDoc(hdcPrint);//通知打印机驱动程序打印完毕
DeleteDC(hdcPrint);