📄 fallback.cpp
字号:
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 + -