coolzdp

 

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

www.myexceptions.net  网友分享于:2014-07-22  浏览:0次
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_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,这样以确认问题是否一定是出在设置上。
 
 
https://bbs.csdn.net/topics/35618(经实测无效)

分类:

技术点:

相关文章:

  • 2021-11-24
  • 2021-12-02
  • 2021-11-21
  • 2021-07-22
  • 2021-11-12
  • 2021-11-24
猜你喜欢
  • 2021-10-17
  • 2021-06-11
  • 2021-11-12
  • 2021-12-12
  • 2021-12-23
  • 2022-12-23
相关资源
相似解决方案