1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
|
HANDLE hDriver;
if(!::OpenPrinter(_T("HP LaserJet"),&hDriver,NULL)) {AfficheErreur(_T("OpenPrinter")); return ;}
if(!hDriver) {AfficheErreur(_T("Tst HPrinter")); return ;}
PRINTER_INFO_2 * pPrnInfo;
DWORD ccBytes = 0;
// Permet de connaitre la taille requise pour les données
::GetPrinter(hDriver, 2, NULL, 0, reinterpret_cast<LPDWORD>(&ccBytes));
pPrnInfo = (PRINTER_INFO_2 *)malloc(ccBytes);
if ( pPrnInfo != NULL )
{
if ( ::GetPrinter(hDriver, 2, reinterpret_cast<LPBYTE>(pPrnInfo), ccBytes, reinterpret_cast<LPDWORD>(&ccBytes)) == 0 )
{
AfficheErreur(_T("GetPrinter"));
CString msg;
msg.Format(_T("Needed : %d, Given %d"), ccBytes, sizeof(PRINTER_INFO_2));
AfxMessageBox(msg);
return;
}
}
DWORD dwBufSize = 0;
LPDEVMODE lpDM;
// get DEVMODE stuff from driver
dwBufSize =::DocumentProperties( NULL,
(HANDLE)hDriver,
(LPSTR)pPrnInfo->pDevMode->dmDeviceName,
(LPDEVMODE)NULL,
(LPDEVMODE)NULL,
(DWORD) 0);
// alloc space for devmode stuff
HANDLE hDevMode= GlobalAlloc(GMEM_MOVEABLE, dwBufSize);
lpDM = (LPDEVMODE)GlobalLock(hDevMode);
dwBufSize = ::DocumentProperties(NULL,
(HANDLE)hDriver,
(LPSTR)pPrnInfo->pDevMode->dmDeviceName,
(LPDEVMODE)lpDM,
(LPDEVMODE)NULL,
(DWORD)DM_COPY);
lpDM->dmOrientation = DMORIENT_LANDSCAPE;
lpDM->dmPaperSize = DMPAPER_ENV_C5;
lpDM->dmDefaultSource = DMBIN_MIDDLE;
lpDM->dmFields = DM_ORIENTATION | DM_PAPERSIZE | DM_DEFAULTSOURCE;
dwBufSize = ::DocumentProperties(NULL,
(HANDLE)hDriver,
(LPSTR)pPrnInfo->pDevMode->dmDeviceName,
(LPDEVMODE)lpDM,
(LPDEVMODE)lpDM,
(DWORD)DM_IN_BUFFER | DM_OUT_BUFFER);
ClosePrinter(hDriver);
CDC pDC2;
pDC2.CreateDC(pPrnInfo->pDriverName, (LPCTSTR)pPrnInfo->pDevMode->dmDeviceName,NULL,lpDM);
pDC2.m_bPrinting = TRUE;
free(pPrnInfo);
// Unlock memory handle.
::GlobalUnlock(hDevMode);
DOCINFO di; ::ZeroMemory (&di, sizeof (DOCINFO));
di.cbSize = sizeof (DOCINFO);
di.lpszDocName = "Carte personalisée";
BOOL bRet=TRUE;
// start document printing process
if (pDC2.StartDoc(&di)!= SP_ERROR)
{
pDC2.StartPage ();
pDC2.EndPage(); // fin de page
pDC2.EndDoc();
}
else
{
AfficheErreur(_T("Open Print"));
}
if(hDevMode != NULL)
{
DEVMODE FAR* pDevMode =(DEVMODE FAR*)GlobalLock(hDevMode);
::GlobalFree(hDevMode);
} |
Partager