MFC 打印 纸张设置 无效解决方案
MFC 打印 纸张设置 无效
用MFC写了个打印程序。
功能:程序中有个模态对话框,可设置纸张为A5/A4/B5.打印方向为:横向/纵向。
问题:有2台打印机,姑且称为A,B吧,都是惠普的,只是型号不同,分别连接在2台电脑上。只有打印机A是按照代码中设置纸张大小和方向打印
的,另一台B总是按照A4纸张打印。
但是预览AB都是正常的。
这个问题,我用了2种解决方法,目前仍不理想:
经过测试,这种方法设置的纸张和方向只有A起作用,B需要在CPrintDialog 中设置才生效。
经过测试,A打印机很正常。但是B打印机就一直是A4效果了。
有没有哪位大神遇到过这种问题呀?这个应该怎么解决才能让自己的模态窗口中设置的参数生效,我的本意是不弹出CPrintDialog 对话框的。
万分感谢!
------解决方案--------------------
帮顶!
------解决方案--------------------
首先先看看打印windows测试页是否纸张也是A4,这样以确认问题是否一定是出在设置上。
用MFC写了个打印程序。
功能:程序中有个模态对话框,可设置纸张为A5/A4/B5.打印方向为:横向/纵向。
问题:有2台打印机,姑且称为A,B吧,都是惠普的,只是型号不同,分别连接在2台电脑上。只有打印机A是按照代码中设置纸张大小和方向打印
的,另一台B总是按照A4纸张打印。
但是预览AB都是正常的。
这个问题,我用了2种解决方法,目前仍不理想:
1.
CPrintDialog dlg(true,PD_ALLPAGES |PD_HIDEPRINTTOFILE |PD_NOPAGENUMS |PD_RETURNDC |PD_USEDEVMODECOPIES|PD_SELECTION,NULL);
CDC dc;
if( IDOK != dlg.DoModal())
return ;
dc.Attach(dlg.m_pd.hDC);
// 打印内容
经过测试,这种方法设置的纸张和方向只有A起作用,B需要在CPrintDialog 中设置才生效。
2.CPrintDialog dlg(false,PD_ALLPAGES |PD_HIDEPRINTTOFILE |PD_NOPAGENUMS |PD_RETURNDC |PD_USEDEVMODECOPIES|PD_SELECTION,NULL);
CDC dc;
if( IDOK != dlg.DoModal())
return ;
LPDEVMODE lpDevMode;
lpDevMode = dlg.GetDevMode();
if(lpDevMode) // DMORIENT_LANDSCAPE 横; DMORIENT_PORTRAIT 纵
{
lpDevMode->dmPaperSize = 0; //自定义纸张 A4 = 9; A5 = 11; B5 = 13;
lpDevMode->dmFields |=DM_PAPERSIZE | DM_PAPERLENGTH | DM_PAPERWIDTH | lpDevMode->dmFields;
lpDevMode->dmPaperSize = 13; // B5
lpDevMode->dmOrientation = DMORIENT_LANDSCAPE ; // 横向
}
dc.Attach(dlg.m_pd.hDC);
if(lpDevMode)
ResetDC(dc,lpDevMode);
// 打印内容
经过测试,A打印机很正常。但是B打印机就一直是A4效果了。
有没有哪位大神遇到过这种问题呀?这个应该怎么解决才能让自己的模态窗口中设置的参数生效,我的本意是不弹出CPrintDialog 对话框的。
万分感谢!
------解决方案--------------------
帮顶!
------解决方案--------------------
首先先看看打印windows测试页是否纸张也是A4,这样以确认问题是否一定是出在设置上。