MFC 打印 纸张设置 无效解决方案

MFC 打印 纸张设置 无效
本帖最后由 songlinok 于 2014-07-08 08:17:39 编辑
用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 对话框的。
万分感谢!
------解决方案--------------------
帮顶!MFC 打印 纸张设置 无效解决方案
------解决方案--------------------
首先先看看打印windows测试页是否纸张也是A4,这样以确认问题是否一定是出在设置上。