打印机相关设置

本文档介绍了如何设置打印机的纸张大小和方向,包括横打竖打的切换以及自定义纸张尺寸的函数。此外,还提供了一个图形化的打印机设置流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.设置打印机纸张以及横打竖打函数

void SetPaper(short paperSize, BOOL bPrintType)
{
    PRINTDLG     pd;
    pd.lStructSize = (DWORD) sizeof(PRINTDLG);
    if (GetPrinterDeviceDefaults(&pd))
    {
        // Lock memory handle.
        DEVMODE FAR* pDevMode =
            (DEVMODE FAR*)::GlobalLock(m_hDevMode);
        LPDEVNAMES lpDevNames;
        LPTSTR lpszDriverName, lpszDeviceName, lpszPortName;
        HANDLE hPrinter;
       
        if (pDevMode)
        {
            // Change printer settings in here.
            if (bPrintType)
            {
                pDevMode->dmOrientation = 1;
            }
            else
            {
                pDevMode->dmOrientation = 2;
            }
            //pDevMode->dmOrientation = 2;
            pDevMode->dmPaperSize = paperSize;
            // Unlock memory handle.
            lpDevNames = (LPDEVNAMES)GlobalLock(pd.hDevNames);
            lpszDriverName = (LPTSTR )lpDevNames + lpDevNames->wDriverOffset;
            lpszDeviceName = (LPTSTR )lpDevNames + lpDevNames->wDeviceOffset;
            lpszPortName     = (LPTSTR )lpDevNames + lpDevNames->wOutputOffset;
           
            ::OpenPrinter(lpszDeviceName, &hPrinter, NULL);
            ::DocumentProperties(NULL,hPrinter,lpszDeviceName,pDevMode,
                pDevMode, DM_IN_BUFFER|DM_OUT_BUFFER);
           
            // Sync the pDevMode.
            // See SDK help for DocumentProperties for more info.
            ::ClosePrinter(hPrinter);
            ::GlobalUnlock(m_hDevNames);
            ::GlobalUnlock(m_hDevMode);
        }
    }
}

 

2.打印机自定义纸张大小设置函数(单位为:0.01cm))

void SetPaper(short pageLength, short pageWidth)
{
    PRINTDLG     pd;
    pd.lStructSize = (DWORD) sizeof(PRINTDLG);
    if (GetPrinterDeviceDefaults(&pd))
    {
        // Lock memory handle.
        DEVMODE FAR* pDevMode =
            (DEVMODE FAR*)::GlobalLock(m_hDevMode);
        LPDEVNAMES lpDevNames;
        LPTSTR lpszDriverName, lpszDeviceName, lpszPortName;
        HANDLE hPrinter;
       
        if (pDevMode)
        {
            // Change printer settings in here.
            pDevMode->dmPaperSize = 256;//自定义纸张,此处得设定为256
            pDevMode->dmPaperLength = pageLength;
            pDevMode->dmPaperWidth = pageWidth;
            // Unlock memory handle.
            lpDevNames = (LPDEVNAMES)GlobalLock(pd.hDevNames);
            lpszDriverName = (LPTSTR )lpDevNames + lpDevNames->wDriverOffset;
            lpszDeviceName = (LPTSTR )lpDevNames + lpDevNames->wDeviceOffset;
            lpszPortName     = (LPTSTR )lpDevNames + lpDevNames->wOutputOffset;
           
            ::OpenPrinter(lpszDeviceName, &hPrinter, NULL);
            ::DocumentProperties(NULL,hPrinter,lpszDeviceName,pDevMode,
                pDevMode, DM_IN_BUFFER|DM_OUT_BUFFER);
           
            // Sync the pDevMode.
            // See SDK help for DocumentProperties for more info.
            ::ClosePrinter(hPrinter);
            ::GlobalUnlock(m_hDevNames);
            ::GlobalUnlock(m_hDevMode);
        }
    }
}

 

3.图形化打印机设置并获取相关设置

void PrintSetup()
{
    ::OnFilePrintSetup();
    CPrintDialog dlg(TRUE);
    dlg.m_pd.hDevMode = m_hDevMode;
    dlg.m_pd.hDevNames = m_hDevNames;
    m_hDefDevMode = *dlg.GetDevMode();
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值