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

📄 fallback.cpp

📁 虚拟打印机
💻 CPP
📖 第 1 页 / 共 3 页
字号:
        switch (pdmIn->dmPrintQuality) {        case DMRES_DRAFT:        case DMRES_LOW:        case DMRES_MEDIUM:        case DMRES_HIGH:            pdmOut->dmPrintQuality = pdmIn->dmPrintQuality;            pdmOut->dmFields |= DM_PRINTQUALITY;            break;		default:			DEBUGMESSAGE( ("Invalid dmPrintQuality = %ld", pdmIn->dmPrintQuality) );			break;        }    }    if (pdmIn->dmFields & DM_COLOR) {        switch (pdmIn->dmColor) {        case DMCOLOR_MONOCHROME:        case DMCOLOR_COLOR:            pdmOut->dmColor = pdmIn->dmColor;            pdmOut->dmFields |= DM_COLOR;            break;		default:			DEBUGMESSAGE( ("Invalid dmColor = %ld", pdmIn->dmColor) );			break;        }    }	if (pdmIn->dmFields & DM_PAPERSIZE) {		BOOL bFieldsOK = FALSE;		if (pdmIn->dmPaperSize == 0 || pdmIn->dmPaperSize == DMPAPER_USER) {			if ( (pdmIn->dmFields & DM_PAPERLENGTH) && (pdmIn->dmFields & DM_PAPERWIDTH) ) {				bFieldsOK = TRUE;			}		} else {			bFieldsOK = TRUE;		}		if (bFieldsOK) {			RECTL rlMargins;			Fallback_GetPaperMargins(rlMargins);			SIZEL szlPaper;			if (Fallback_GetPaperSize(pdmIn->dmPaperSize, pdmIn->dmPaperWidth, pdmIn->dmPaperLength, 										rlMargins, szlPaper)) {				pdmOut->dmPaperSize = pdmIn->dmPaperSize;				pdmOut->dmPaperWidth = RoundToLong(szlPaper.cx / 100.0);				pdmOut->dmPaperLength = RoundToLong(szlPaper.cy / 100.0);				BOOL bLandscape =	(pdmOut->dmFields & DM_ORIENTATION) && 									(pdmOut->dmOrientation == DMORIENT_LANDSCAPE);				if (bLandscape) {					swap(pdmOut->dmPaperWidth, pdmOut->dmPaperLength);				}				const ::PAPERSIZEINFO* ppsi = ::LookupPaperSize(pdmIn->dmPaperSize);				if (ppsi != NULL) {					StringCchCopy(pdmOut->dmFormName, ARRCOUNT(pdmOut->dmFormName), ppsi->lpszName);				} else {					StringCchCopy(pdmOut->dmFormName, ARRCOUNT(pdmOut->dmFormName), TEXT("User Defined"));				}				pdmOut->dmFields |= DM_PAPERSIZE | DM_PAPERWIDTH | DM_PAPERLENGTH | DM_FORMNAME;			} else {				DEBUGMESSAGE( ("Paper size invalid.  dmPaperSize = %ld, dmPaperWidth = %ld, dmPaperLength = %ld", pdmIn->dmPaperSize, pdmIn->dmPaperWidth, pdmIn->dmPaperLength) );			}		} else {			DEBUGMESSAGE( ("Invalid paper size flags set in dmFields.  dmFields = %ld, dmPaperSize = %ld", pdmIn->dmFields, pdmIn->dmPaperSize) );		}	}}// **********************************************************************************// **  MODULE DATA, PUBLIC AND PRIVATE  ********************************************// **********************************************************************************// NOTE:  THESE CONSTANTS ARE FROM PRINTMIRROR// DEBUG / FIX WE SHOULD SET THE MOST "IDEALIZED" POSSIBLE, AS IF WE CAN RENDER ANY COLOR WHATSOEVER// FOR THE FALLBACK CASE POSSIBLY EVEN FOR A REAL TARGET PRINTER (EVEN IF WE COULD GET THIS INFO FOR IT)const COLORINFO g_ciDevice= {	{ 6810, 3050,     0 },  // xr, yr, Yr	{ 2260, 6550,     0 },  // xg, yg, Yg	{ 1810,  500,     0 },  // xb, yb, Yb	{ 2000, 2450,     0 },  // xc, yc, Yc	{ 5210, 2100,     0 },  // xm, ym, Ym	{ 4750, 5100,     0 },  // xy, yy, Yy	{ 3324, 3474, 10000 },  // xw, yw, Yw	10000,                  // R gamma	10000,                  // G gamma	10000,                  // B gamma	1422,  952,             // M/C, Y/C	787,  495,             // C/M, Y/M	324,  248              // C/Y, M/Y};const DEVMODE g_dmFallback = {	// 6/23 ITS NOT A DRIVER NAME	//PRINTRESIZER_DRIVERNAME,    // dmDeviceName - filled later	TEXT("temp static str"),    // dmDeviceName - filled later	DM_SPECVERSION,             // dmSpecVersion	//6/21	//		0x100,		// dmDriverVersion	//PRINTRESIZER_VERSION,		// dmDriverVersion	0,						// dmDriverVersion -- NOBODYS DEVMODE, THS IS JUST DATA FOR PUBLIC MEMBERS	sizeof(DEVMODE),            // dmSize	//sizeof(PRIVDEVMODE),           // dmDriverExtra	0,					           // dmDriverExtra -- NOBODYS DEVMODE, THS IS JUST DATA FOR PUBLIC MEMBERS	// SWITCH BACK TO FULL FLAGS, THEY MEAN THE FIELDS HAVE BEEN FILLED IN, NOT THAT THEY CAN BE SET	DM_ORIENTATION       |		DM_PAPERSIZE     |		DM_PAPERLENGTH   |		DM_PAPERWIDTH    |		DM_SCALE         |		DM_COPIES        |		DM_DEFAULTSOURCE |  		DM_PRINTQUALITY  |		DM_COLOR         |		DM_DUPLEX        |		// DM_YRESOLUTION   |		// DM_TTOPTION      |		// DM_COLLATE       |		DM_FORMNAME			|		0,	//DM_COPIES,					// FOR NOW THIS IS ONLY SETTABLE AND 	//							// IS INDEPENDENT FROM TARGET -- 	//							// dmFlags IS ALSO INDEPENDENT	DMORIENT_PORTRAIT,          // dmOrientation	DMPAPER_LETTER,             // dmPaperSize	2794,                       // dmPaperLength	2159,                       // dmPaperWidth	100,                        // dmScale	1,                          // dmCopies	DMBIN_ONLYONE,                          // dmDefaultSource  WE RETURN THIS IN DrvDeviceCapabilities	//0,                          // dmDefaultSource  - RESERVED = 0 // DEBUG - FIXED NOT RESERVED	DMRES_HIGH,                 // dmPrintQuality	DMCOLOR_COLOR,              // dmColor	DMDUP_SIMPLEX,              // dmDuplex -- WE RETURN NOT SUPPORTED IN DrvDeviceCapabilities	0,                          // dmYResolution	0,                          // dmTTOption	DMCOLLATE_FALSE,            // dmCollate	TEXT("Letter"),             // dmFormName - depends on country	0,                          // dmUnusedPadding   - DISPLAY ONLY // debug - fix  logpix	0,                          // dmBitsPerPel      - DISPLAY ONLY	// 6/24 DEBUG/FIX	0,                       // dmPelsWidth       - DISPLAY ONLY	0,                       // dmPelsHeight      - DISPLAY ONLY	//2100,                       // dmPelsWidth       - DISPLAY ONLY	//2970,                       // dmPelsHeight      - DISPLAY ONLY	0,                          // dmDisplayFlags    - DISPLAY ONLY	0                           // dmDisplayFrequency- DISPLAY ONLY};#if 0DWORD Fallback_GetDeviceCapabilities(	HANDLE hPrinter,    WORD  iDevCap,    VOID  *pvOutput	) {	DWORD dwRet = 0;	switch (iDevCap) {    case DC_BINNAMES:		if (pvOutput != NULL) {			// NOT SURE IF ANSI OR NOT			::ZeroMemory(pvOutput, 24);			::StringCchCopy((LPTSTR) pvOutput, 24, TEXT("Default Bin"));			//::StringCchCopyA(pch, 24, "Default Bin");		}		dwRet = 1;		break;    case DC_BINS:		if (pvOutput != NULL) {			PWORD pw = (PWORD) pvOutput;			*pw = DMBIN_ONLYONE;		}        dwRet = 1;		break;    case DC_COPIES:        dwRet = 1;        break;    case DC_DRIVER:		dwRet = gextdmStatic.dm.dmDriverVersion;		break;    case DC_COLLATE:		dwRet = 0;		break;    case DC_DUPLEX:		dwRet = 0;        break;    case DC_ENUMRESOLUTIONS:		if (pvOutput != NULL) {			PDWORD pdw = (PDWORD) pvOutput;			pdw[0] = PRINTRESIZER_FALLBACK_LOGPIXELS_X;			pdw[1] = PRINTRESIZER_FALLBACK_LOGPIXELS_Y;		}        dwRet = 1;        break;    case DC_EXTRA:        dwRet = sizeof(PRIVDEVMODE);        break;    case DC_FIELDS:		dwRet = gextdmStatic.dm.dmFields;        break;    case DC_FILEDEPENDENCIES:		// THIS IS WHAT MSPLOT DOES -- RETURNS 0 AND THEN SETS A WCHAR TO 0 IF A BUFFER IS GIVEN		if (pvOutput != NULL) {			* (LPTSTR) pvOutput = (WCHAR) 0;		}		dwRet = 0;	    break;	case DC_MAXEXTENT: {		PPOINTS ppts = (PPOINTS) &dwRet;		ppts->x = 2159;		ppts->y = 2794;	} break;	case DC_MINEXTENT: {		PPOINTS ppts = (PPOINTS) &dwRet;		ppts->x = 2159;		ppts->y = 2794;	} break;    case DC_ORIENTATION:        dwRet = 90;        break;    case DC_PAPERNAMES:    case DC_PAPERS:	case DC_PAPERSIZE: {		if (pvOutput != NULL) {			switch(iDevCap) {			case DC_PAPERNAMES:				// NOT SURE ANSI OR UNICODE				::ZeroMemory(pvOutput, 64);				StringCchCopy( (LPTSTR) pvOutput, 64, TEXT("Letter"));				break;			case DC_PAPERS:				* (WORD *) pvOutput = DMPAPER_LETTER;				break;			case DC_PAPERSIZE: 				( (POINT *) pvOutput ) -> x = 2159;				( (POINT *) pvOutput ) -> y = 2794;				break;					default:				ASSERTFAIL();				break;			}		}		dwRet = 1;	} break; // case DC_PAPER...    case DC_SIZE:		dwRet = gextdmStatic.dm.dmSize;		break;    case DC_TRUETYPE:		dwRet = 0;		break;    case DC_VERSION:		dwRet = gextdmStatic.dm.dmSpecVersion;        break;    case DC_PERSONALITY:		dwRet = 0;        break;    case DC_COLORDEVICE:		dwRet = (gextdmStatic.dm.dmColor == DMCOLOR_COLOR) ? 1 : 0;        break;    case DC_MEDIAREADY:		dwRet = 0;        break;    case DC_STAPLE:		dwRet = 0;		break;    case DC_NUP:		dwRet = 0;        break;	case DC_EMF_COMPLIANT:		dwRet = GDI_ERROR;		break;    default:        dwRet = GDI_ERROR;		break;    }	return dwRet;}#endif

⌨️ 快捷键说明

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