Как я могу получить контекст устройства принтера? - PullRequest
3 голосов
/ 30 июля 2009

Я в Windows и пытаюсь распечатать расширенный метафайл (EMF), используя PlayEnhMetaFile ().

В настоящее время я отображаю его, используя контекст устройства для окна на экране, но теперь я хочу отправить его на принтер.

Как получить контекст устройства для принтера и правильно передать его в эту функцию?

Ответы [ 2 ]

4 голосов
/ 30 июля 2009

Самый простой способ - использовать конструкцию контекста устройства из PRINTDLG.hDevMode и PRINTDLG.hDevNames после вызова PrintDlg при использовании win32 API или вызова CPrintDialog::GetPrinterDC при использовании MFC.

При использовании MFC:

CPrintDialog dlgPrint(FALSE, PD_USEDEVMODECOPIES);
HDC hPrinterDC = dlgPrint.GetPrinterDC();

или win32 API:

HDC hPrinterDC = NULL;
PRINTDLG dlgPrint;
if (PrintDlg(&dlgPrint) && dlgPrint.hDevMode != NULL)
{
    DEVNAMES *pDevNames = (DEVNAMES*)GlobalLock(dlgPrint.hDevNames);
    DEVMODE* pDevMode = NULL;
    if (dlgPrint.hDevMode != NULL)
        pDevMode = GlobalLock(dlgPrint.hDevMode);
    hPrinterDC = CreateDC((LPCTSTR)pDevNames + pDevNames->wDriverOffset,
                          (LPCTSTR)pDevNames + pDevNames->wDeviceOffset,
                          (LPCTSTR)pDevNames + pDevNames->wOutputOffset,
                          pDevMode);
    GlobalUnlock(dlgPrint.hDevNames);
    if (dlgPrint.hDevMode != NULL)
        GlobalUnlock(dlgPrint.hDevMode);
}
3 голосов
/ 14 августа 2009

CreateDC может это сделать,

HDC hDC = CreateDC(NULL,printerName,NULL,NULL);

Имя принтера можно получить в EnumPrinters.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...