⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 paper.cpp

📁 PrintMirror 1.5 可用版 VC6 + DDK
💻 CPP
字号:
/*   PrintMirror extracts individual page metafiles from Spool File.   Copyright (C) 2002-2004  Vipin Aravind   This program is free software; you can redistribute it and/or modify   it under the terms of the GNU General Public License as published by   the Free Software Foundation; either version 2 of the License, or   (at your option) any later version.   This program is distributed in the hope that it will be useful,   but WITHOUT ANY WARRANTY; without even the implied warranty of   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   GNU General Public License for more details.   You should have received a copy of the GNU General Public License   along with this program; if not, write to the Free Software   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA      Contact at vprnt@lycos.com */#include "prntmrui.h"#include <winspool.h>PDEVMODE GetRealPrinterDevmode(HANDLE hRPrinter, WCHAR *RealDriverName, VDEVMODE *pCurDevmode){     LONG sz = DocumentProperties(0,hRPrinter , RealDriverName,0,0,0);     PDEVMODE pdmOutput = (PDEVMODE)malloc(sz);     DocumentProperties(0,hRPrinter , RealDriverName,pdmOutput,0,DM_OUT_BUFFER);     int dmDriverExtra =  pdmOutput->dmDriverExtra;     memcpy(pdmOutput , pCurDevmode , sizeof(DEVMODEW));     pdmOutput->dmDriverExtra = dmDriverExtra;     DocumentProperties(0,hRPrinter , RealDriverName,pdmOutput,pdmOutput,             DM_IN_BUFFER | DM_OUT_BUFFER);     return pdmOutput;}void PrintToPaper(PPDEV pPDev){     DOCINFO di;     LPBYTE pDevmode;     pDevmode = NULL;     VDEVMODE *pCurDevmode = pPDev->pCurDevmode;     WCHAR *RealDriverName = (WCHAR *)(((LPBYTE)pCurDevmode) + sizeof(DEVMODEW));     HANDLE hRPrinter;        OpenPrinter(RealDriverName, &hRPrinter, NULL);     PDEVMODE pdmOutput = GetRealPrinterDevmode(hRPrinter,RealDriverName,pCurDevmode);     HDC hRealDC = CreateDC(L"WINSPOOL", RealDriverName, NULL, pdmOutput);     free(pdmOutput);     HDC hWorkingDC = hRealDC;     memset(&di , 0 , sizeof(DOCINFO));     di.lpszDocName = pPDev->pDocument;     di.lpszDatatype = L"raw";     if(StartDoc(hWorkingDC , &di) > 0)     {          for(int i = 1 ; i <= pPDev->Pages ; i++)          {               pDevmode = NULL;               TCHAR MetaFileList[MAX_PATH];               GetTempFile(NULL ,L"Meta" , MetaFileList);               GetMetaFileFromSpoolFile(pPDev->pSpoolFileName ,i,MetaFileList,                       pPDev, &pDevmode);               if(pDevmode != NULL)               {                    PDEVMODE pdmOutput = GetRealPrinterDevmode(hRPrinter,RealDriverName,                            (VDEVMODE *)pDevmode);                    hWorkingDC = ResetDC(hWorkingDC , (DEVMODE *)pdmOutput);                    free(pDevmode);                    free(pdmOutput);               }               StartPage(hWorkingDC);               HENHMETAFILE hemf = GetEnhMetaFile(                       MetaFileList   // file name                       );               RECT rect;               rect.left = rect.top = 0;               rect.bottom = GetDeviceCaps(hWorkingDC , VERTRES);               rect.right = GetDeviceCaps(hWorkingDC , HORZRES);               PlayEnhMetaFile( hWorkingDC, hemf, &rect );               EndPage(hWorkingDC);               DeleteEnhMetaFile(hemf);               DeleteFile(MetaFileList);          }     }     EndDoc(hWorkingDC);     ClosePrinter(hRPrinter);     DeleteDC(hWorkingDC);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -