使用GetDeviceCaps获得打印机纸张大小的问题

lirg8405 2020-02-29 11:43:31
int nPaper_W = pPrintDC->GetDeviceCaps(HORZSIZE); // 纸张宽度mm
int nPaper_H = pPrintDC->GetDeviceCaps(VERTSIZE); // 纸张高度mm
使用这两行代码,获得打印机纸张的宽高。

比如,原来是A4的,得到的是210*297;
但是我通过打印机的首选项修改了纸张为A3的。再次运行程序还是得到A4的。

换热敏打印机,开始得到的是102*102的。修改为70*25的,得到的还是102*102.
用其他程序测试打印机,是按照70*25走纸的。

为什么这个函数无法得到实时的纸张尺寸?
有什么办法可以得到这个时间的纸张尺寸吗?
...全文
543 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lirg8405 2020-03-01
  • 打赏
  • 举报
回复
我知道什么原因了,是我创建打印机的参数有问题。这个问题已经解决。
lirg8405 2020-03-01
  • 打赏
  • 举报
回复
引用 1 楼 zgl7903 的回复:
我测试的没有问题

  CPrintDialog dlg(FALSE);
  if(dlg.DoModal() == PD_RESULT_PRINT)
  {
    HDC hDC = dlg.GetPrinterDC( );

    int cx = GetDeviceCaps(hDC, HORZSIZE);
    int cy = GetDeviceCaps(hDC, VERTSIZE);

    TRACE(_T("cx=%d, cy=%d\n"), cx, cy);

    DeleteDC(hDC);
  }
我没有使用打印对话框,以下是过程: 通过枚举得到的打印机信息,根据选择的打印机,创建DC. LPPRINTER_INFO_2 pTemp = m_pPrinter_info + nCursel; HDC hPrintDC = CreateDC(pTemp->pDriverName,pTemp->pPrinterName,pTemp->pPortName,pTemp->pDevMode); //成功后 CDC cCompatibleDC; cCompatibleDC.Attach(hPrintDC); int nPaper_W= cCompatibleDC.GetDeviceCaps(HORZSIZE); // 纸张宽度mm int nPaper_H = cCompatibleDC.GetDeviceCaps(VERTSIZE); // 纸张高度mm 这里取宽高。我用100*100的纸测试,可以正常打印的。只是修改了纸张后,得不到修改后的。不知道是为什么。
zgl7903 2020-03-01
  • 打赏
  • 举报
回复
我测试的没有问题

  CPrintDialog dlg(FALSE);
  if(dlg.DoModal() == PD_RESULT_PRINT)
  {
    HDC hDC = dlg.GetPrinterDC( );

    int cx = GetDeviceCaps(hDC, HORZSIZE);
    int cy = GetDeviceCaps(hDC, VERTSIZE);

    TRACE(_T("cx=%d, cy=%d\n"), cx, cy);

    DeleteDC(hDC);
  }

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧