我在Windows上並嘗試使用PlayEnhMetaFile()打印增強型圖元文件(EMF)。如何獲得打印機設備上下文?
我目前在屏幕上使用設備上下文顯示窗口,但現在我想將它發送到打印機。
如何獲取打印機的設備上下文並將其正確傳遞到此功能?
我在Windows上並嘗試使用PlayEnhMetaFile()打印增強型圖元文件(EMF)。如何獲得打印機設備上下文?
我目前在屏幕上使用設備上下文顯示窗口,但現在我想將它發送到打印機。
如何獲取打印機的設備上下文並將其正確傳遞到此功能?
最簡單的方法是,如果使用Win32 API,或者如果您正在使用MFC調用CPrintDialog::GetPrinterDC
調用PrintDlg
後使用從PRINTDLG.hDevMode
和PRINTDLG.hDevNames
構建設備上下文。
如果使用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);
}
的CreateDC可以做到這一點,
HDC hDC = CreateDC(NULL,printerName,NULL,NULL);
您可以從EnumPrinters得到PRINTERNAME。
有沒有辦法獲得CDC對象? – samoz 2009-07-30 19:26:48
當然:CDC :: FromHandle() – Alan 2009-07-30 23:21:20