打印机相关设置

来源:互联网 发布:windows日程提醒软件 编辑:程序博客网 时间:2024/06/11 05:15

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();
}

 

原创粉丝点击