亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? extdevmode.cpp

?? 虛擬打印機(jī)
?? CPP
?? 第 1 頁 / 共 2 頁
字號(hào):
/* *  * extDevMode.cpp *   Copyright (C) 2006 Michael H. Overlin   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 poster_printer@yahoo.com */#define EXTDEVMODE_C#include "extDevMode.h"//#include "devModeV351.h"#include "devModeV400.h"//#include "devModeV401.h"#include "devmode.h"#include "fallback.h"#include "mathutils.h"#include "printResizerCommon.h"#include "prutils.h"#include "spoolutils.h"#include "utils.h"#include "winstdforms.h"#include <windows.h>#include <winspool.h>#include <tchar.h>#include <strsafe.h>#include <vector>#include <malloc.h>PDEVMODE GetPrinterDevMode(IN LPCTSTR lptstrPrinterName, PBYTE pBuff) ;// **********************************************************************************// **  EXTDEVMODE  ******************************************************************// **********************************************************************************struct PRIVDEVMODE {	//DWORD dwMagic; 	//DWORD dwVersion;	TCHAR atstrTargetPrinterName[TARGETPRINTERNAME_MAX];		// IF TARGET PRINTER DEVMODE IS TOO BIG TO FIT, WE USE THE SPOOLER'S VERSION	// AND IT CAN'T BE CONFIGURED FROM OUR DOCUMENTPROPERTIES	BYTE abAppLocalTargetPrinterDevmodeBuffer[PRINTRESIZER_MAX_TARGETPRINTER_DEVMODE_SIZE];} ;typedef PRIVDEVMODE *PPRIVDEVMODE;typedef const PRIVDEVMODE* PCPRIVDEVMODE;struct EXTDEVMODE {	DEVMODE dm;	PRIVDEVMODE privdm;} ;//typedef EXTDEVMODE *PEXTDEVMODE;//typedef const EXTDEVMODE *PCEXTDEVMODE;// CURRENTLY NOT BEING USED#define EXTDEVMODE_MAGIC					0xae972ae3void EXTDM_Init(PEXTDEVMODE pextdm);PCPRIVDEVMODE EXTDM_GetPrivDM(PCEXTDEVMODE pextdm) ;PDEVMODE EXTDM_GetTargetPrinterDevMode_Internal(IN PEXTDEVMODE pextdm) ;BOOL EXTDM_IsCircular_Internal(	OUT BOOL& bCircular, 	IN PCEXTDEVMODE pextdm, 	IN OUT std::vector<PCEXTDEVMODE>& vextdm) ;void EXTDM_Merge(OUT PEXTDEVMODE pextdmOut, IN PCDEVMODE pdmIn, PCDEVMODE pdmTargetIn = NULL) ;void EXTDM_SetPublicDMFromTargetDM(OUT PEXTDEVMODE pdmOut, IN PCDEVMODE pdmIn) ;void EXTDM_SetPrivateDM(OUT PEXTDEVMODE pdmOut, IN PCPRIVDEVMODE pprivdmIn, PCDEVMODE pdmTargetIn = NULL) ;static void EXTDM_SetTargetDMFromPublicDM(OUT PDEVMODE pdmOut, IN PCEXTDEVMODE pextdmIn) ;// **** // **** public:  EXTDEVMODE// **** BOOL EXTDM_CanConfigureTargetPrinterDevMode(IN PCEXTDEVMODE pextdm) {	BOOL bRetValue = FALSE;	PCDEVMODE pdmTarget = ::EXTDM_GetTargetPrinterDevMode(pextdm);	if (pdmTarget != NULL) {		if ( (PCDEVMODE) pextdm->privdm.abAppLocalTargetPrinterDevmodeBuffer == pdmTarget ) {			bRetValue = TRUE;		}		::EXTDM_ReleaseTargetPrinterDevMode(pextdm, pdmTarget);	}	return bRetValue;}void EXTDM_Delete(PEXTDEVMODE pextdm) {	if (pextdm != NULL) {		free(pextdm);	}}LONG EXTDM_DoTargetPrinterDocumentProperties(PEXTDEVMODE pextdm, HWND hWnd) {	LPCTSTR lptstrTargetPrinterName = ::EXTDM_GetTargetPrinterName(pextdm);	LONG lRetValue = ::DoDocumentProperties(		hWnd,		lptstrTargetPrinterName,		(PDEVMODE) pextdm->privdm.abAppLocalTargetPrinterDevmodeBuffer,		DM_IN_BUFFER | DM_OUT_BUFFER | DM_PROMPT		);	::EXTDM_SetPublicDMFromTargetDM(pextdm, (PDEVMODE) pextdm->privdm.abAppLocalTargetPrinterDevmodeBuffer);	return lRetValue;}DWORD EXTDM_Get_dmDriverExtra(void) {	return sizeof(PRIVDEVMODE);}DWORD EXTDM_Get_dmSize(void) {	return sizeof(DEVMODE);}DWORD EXTDM_Get_dmSpecVersion(void) {	return DM_SPECVERSION;}PCDEVMODE EXTDM_GetTargetPrinterDevMode(IN PCEXTDEVMODE pextdm, BOOL bValidateUnsaved) {	PDEVMODE pdm = ::EXTDM_GetTargetPrinterDevMode_Internal( const_cast<PEXTDEVMODE>(pextdm));	//6/11 CHANGE	if (bValidateUnsaved) {		if (pdm != (PCDEVMODE) pextdm->privdm.abAppLocalTargetPrinterDevmodeBuffer) {			// 6/23			BOOL bCircular;			if ( ::EXTDM_IsCircular(bCircular, pextdm) ) { // DEBUG / FIX -- THE //SERVER/NAME AND NAME ARE CONSID. DIFF!				// 6/23				// I THINK IF IT'S CIRCULAR THEN THE PUBLIC PORTIION IS ALL WE ARE DEALING WITH				// AND THERE IS NO REASON TO TRY TO VALIDATE IT THRU ANYTHING (OR PROCESS) HERE				// VALIDATION/MERGE OCCURS ELSEWHERE				if (!bCircular) {					::EXTDM_SetTargetDMFromPublicDM(pdm, pextdm);					::DoDocumentProperties(NULL, ::EXTDM_GetTargetPrinterName(pextdm), pdm, DM_IN_BUFFER | DM_OUT_BUFFER);				} else {					// DEBUG - FIX - HERE ISWHY LANDSCAPSE ISN'T WORKING, IF CIRCULAR WE NEED 					//TO EITHER MERGE OR SETAPPDEVMODE ON THE RETURN USEING OUR INPUT pextdm 					// DO FALLBACK MERGE					::Fallback_Merge(pdm, &pextdm->dm);				}			} else {				// ERROR -- WE COULDN'T CHECK IF TARGET REFERENCE IS ULTIMATELY CIRCULAR				if (pdm != NULL) {					::EXTDM_ReleaseTargetPrinterDevMode(pextdm, pdm);					pdm = NULL;				}			}		}	}	return pdm;}LPCTSTR EXTDM_GetTargetPrinterName(IN PCEXTDEVMODE pextdm) {	return pextdm->privdm.atstrTargetPrinterName;}BOOL EXTDM_IsAnExtDevMode(IN PCDEVMODE pdm) {	if (pdm != NULL && pdm->dmDriverExtra == sizeof(PRIVDEVMODE)) {		return TRUE;	}	return FALSE;}// bCircular IS CALCULATED ALWAYS FOR THE PRINTER AT RECURSION LEVEL 0.// THAT IS, AS WE GO DOWN IN TARGET PRINTERS, WE MAY COME ACROSS A CIRCLE, BUT THAT DOES NOT// MAKE THE PRINTER AT RECURSION LEVEL 0 CIRCULAR UNLESS THE CIRCLE REFERS BACK TO IT.// SO WE CAN HAVE ONE OF OUR PRINTERS HAVE A CIRCULAR SET OF PRINTERS AS A TARGET, BUT NOT// BE CONSIDERED CIRCULAR ITSELF.  THE CIRCULAR SET OF PRINTERS WON'T USE GDI TO CALCULATE THEIR// GDIINFO OR DEVCAPS, BUT ONE OF OUR PRINTERS THAT HAS THEM AS A TARGET WILL -- AND THIS WON'T// RESULT IN INFINITE RECURSION IN THE GRAPHICS OR UI DLL'S.BOOL EXTDM_IsCircular(OUT BOOL& bCircular, IN PCEXTDEVMODE pextdm) {	std::vector<PCEXTDEVMODE> vextdm;	BOOL bRetValue = EXTDM_IsCircular_Internal(bCircular, pextdm, vextdm); 	return bRetValue;}PEXTDEVMODE EXTDM_New(void) {	PEXTDEVMODE pextdm = (PEXTDEVMODE) malloc(sizeof(EXTDEVMODE));	return pextdm;}void EXTDM_ReleaseTargetPrinterDevMode(IN PCEXTDEVMODE pextdm, IN PCDEVMODE pdmTargetPrinter) {	if (pdmTargetPrinter != (PCDEVMODE) pextdm->privdm.abAppLocalTargetPrinterDevmodeBuffer) {		free( const_cast<PDEVMODE>(pdmTargetPrinter));	}}void EXTDM_SetAppDevMode(OUT PEXTDEVMODE pextdmOut, IN PCDEVMODE pdmIn, IN LPCTSTR lptstrPrinterName) {	PDEVMODE pdmTemp = NULL;	EXTDM_SetToDefault(pextdmOut, lptstrPrinterName);	pdmTemp = GetPrinterDevMode(lptstrPrinterName);	if (pdmTemp != NULL) {		EXTDM_Merge(pextdmOut, pdmTemp);		free(pdmTemp);		} 	if (pdmIn != NULL) { 		if (::EXTDM_IsAnExtDevMode(pdmIn)) {			PEXTDEVMODE pextdmIn = (PEXTDEVMODE) pdmIn;			BOOL bCircular;			if (::EXTDM_IsCircular(bCircular, pextdmIn)) {				if (!bCircular) {					PDEVMODE pdmTargetIn = ::EXTDM_GetTargetPrinterDevMode_Internal(pextdmIn);					if (pdmTargetIn != NULL) {						::EXTDM_SetTargetDMFromPublicDM(pdmTargetIn, pextdmIn);						::DoDocumentProperties(NULL, pextdmIn->privdm.atstrTargetPrinterName, 							pdmTargetIn, DM_IN_BUFFER | DM_OUT_BUFFER);					}					EXTDM_Merge(pextdmOut, pdmIn, pdmTargetIn);					if (pdmTargetIn != NULL) {						::EXTDM_ReleaseTargetPrinterDevMode( (PEXTDEVMODE) pdmIn, pdmTargetIn );					}				} else {					// DO FALLBACK MERGE					::Fallback_Merge(& pextdmOut->dm, pdmIn);				}			}		} 	}}void EXTDM_SetTargetPrinterName(OUT PEXTDEVMODE pdmOut, IN LPCTSTR lptstrTargetPrinterName, PCDEVMODE _pdmTargetIn) {	StringCchCopy(		pdmOut->privdm.atstrTargetPrinterName,		ARRCOUNT(pdmOut->privdm.atstrTargetPrinterName),		( lptstrTargetPrinterName != NULL ? lptstrTargetPrinterName : TEXT("") )		);	//PDEVMODE pdmTargetIn = GetPrinterDevMode(lptstrTargetPrinterName, pdmOut->privdm.abAppLocalTargetPrinterDevmodeBuffer);	// 6/11 CHANGE (AND TO GETTARGETPRINTERDEVMODE)	PCDEVMODE pdmTargetIn = (_pdmTargetIn == NULL) ? ::EXTDM_GetTargetPrinterDevMode(pdmOut, FALSE) : _pdmTargetIn ;	if (pdmTargetIn != NULL) {		EXTDM_SetPublicDMFromTargetDM(pdmOut, pdmTargetIn);		if (pdmTargetIn != (PDEVMODE) pdmOut->privdm.abAppLocalTargetPrinterDevmodeBuffer) {			DWORD dwCbTargetDevMode = ::DM_GetTotalSize(pdmTargetIn);			if (dwCbTargetDevMode <= sizeof(pdmOut->privdm.abAppLocalTargetPrinterDevmodeBuffer)) {				::CopyMemory( pdmOut->privdm.abAppLocalTargetPrinterDevmodeBuffer, pdmTargetIn, dwCbTargetDevMode );

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产乱子轮精品视频| 成人动漫一区二区在线| 亚洲成av人片在线| 一区二区激情视频| 一区二区三区精品视频在线| 亚洲欧美日韩精品久久久久| 国产精品久久毛片a| 久久九九影视网| 久久久不卡网国产精品二区| 久久久一区二区| 久久综合久久综合久久| 久久美女艺术照精彩视频福利播放| 日韩欧美精品在线| 精品国产1区二区| 久久久国产精品不卡| 久久精品亚洲乱码伦伦中文| 久久久亚洲高清| 日本一区二区三区国色天香 | 日韩视频一区二区三区在线播放| 精品视频在线免费看| 6080yy午夜一二三区久久| 69精品人人人人| 欧美精品一区二区三区高清aⅴ| 精品成a人在线观看| 久久精品免费在线观看| 中日韩av电影| 亚洲综合激情网| 日韩成人午夜精品| 日韩av网站免费在线| 精品亚洲国内自在自线福利| 国产精品一卡二卡在线观看| av成人免费在线| 中文字幕一区二区5566日韩| 国产精品家庭影院| 亚洲午夜国产一区99re久久| 日本色综合中文字幕| 国产一区二区精品在线观看| 成人免费福利片| 欧美综合在线视频| 欧美成人r级一区二区三区| 久久九九久精品国产免费直播| 国产精品久久久久婷婷| 亚洲成人av免费| 经典三级视频一区| 99精品一区二区三区| 欧美日韩国产三级| 国产亚洲欧美激情| 一区二区理论电影在线观看| 久久精品国产一区二区| 波多野结衣在线aⅴ中文字幕不卡| 欧美性生活久久| 精品国产一区二区三区久久久蜜月 | 蜜桃一区二区三区四区| 粉嫩绯色av一区二区在线观看 | 国产精品免费视频观看| 亚洲蜜桃精久久久久久久| 蜜臀av一区二区三区| 波多野结衣中文一区| 欧美一区在线视频| 国产精品国产三级国产普通话99 | 日韩成人午夜精品| 成人av网站在线观看| 欧美一级欧美三级在线观看| 中文字幕亚洲精品在线观看| 美洲天堂一区二卡三卡四卡视频| 99视频一区二区| 日韩精品一区二区三区在线观看 | 国产亚洲一本大道中文在线| 亚洲主播在线播放| 成人免费福利片| 欧美va亚洲va| 亚洲韩国一区二区三区| 成人免费视频国产在线观看| 日韩亚洲欧美一区| 亚洲激情在线播放| 成人性生交大片免费| 日韩三级在线观看| 亚洲成人综合视频| av不卡免费电影| 久久久91精品国产一区二区精品| 日日夜夜一区二区| 欧洲一区在线电影| 国产精品国产精品国产专区不蜜 | 久久久一区二区三区| 日本成人超碰在线观看| 91精品福利视频| 国产精品免费视频一区| 国产乱码精品一品二品| 日韩三级免费观看| 五月天欧美精品| 欧美伊人久久大香线蕉综合69| 国产精品久久毛片| www.欧美.com| 国产日韩一级二级三级| 久久99精品久久久| 日韩三区在线观看| 免费看黄色91| 日韩一区二区三区四区| 午夜伦欧美伦电影理论片| 在线看不卡av| 一区二区三区**美女毛片| 91在线视频播放地址| 国产精品国产三级国产普通话蜜臀| 国产成人亚洲综合a∨婷婷图片| wwwwww.欧美系列| 精品在线观看视频| 久久综合999| 国产一区二区三区高清播放| 久久综合久久久久88| 国产老妇另类xxxxx| www激情久久| 国产 日韩 欧美大片| 国产精品污网站| 99国产欧美另类久久久精品| 亚洲欧洲日产国码二区| 91视频观看视频| 亚洲一区二区三区爽爽爽爽爽| 在线观看日韩一区| 午夜精品在线看| 91精品欧美综合在线观看最新 | 91小视频免费观看| 亚洲另类在线一区| 欧美三级日韩三级国产三级| 天天色图综合网| 日韩午夜在线播放| 国产一区高清在线| 国产精品视频yy9299一区| 91亚洲大成网污www| 亚洲国产精品影院| 日韩免费高清av| 国产成人在线网站| 亚洲视频免费在线| 欧美日韩二区三区| 蜜桃av噜噜一区二区三区小说| 精品电影一区二区三区| 成人黄页毛片网站| 一区二区三区免费网站| 欧美巨大另类极品videosbest | 色94色欧美sute亚洲线路一ni| 亚洲一区二区在线视频| 91精品国产高清一区二区三区 | 欧美日韩色一区| 免费一级片91| 国产区在线观看成人精品 | 欧美伦理影视网| 国产一区二区精品久久91| 中文字幕在线免费不卡| 欧美私人免费视频| 国产一二精品视频| 亚洲欧美日韩国产中文在线| 91精品免费在线观看| 国产成人精品1024| 亚洲一区二区三区在线| 精品毛片乱码1区2区3区| aaa国产一区| 男女男精品网站| 中文字幕中文在线不卡住| 欧美久久婷婷综合色| 粉嫩av一区二区三区粉嫩| 亚洲午夜精品在线| 久久久午夜精品理论片中文字幕| 色综合天天性综合| 捆绑紧缚一区二区三区视频| 亚洲婷婷综合久久一本伊一区| 欧美精品xxxxbbbb| 成人午夜电影久久影院| 天堂在线亚洲视频| 国产精品二三区| 欧美成人性福生活免费看| 色综合天天在线| 精品一二三四在线| 性做久久久久久免费观看| 国产精品网站在线| 欧美一区二区三区视频免费 | 不卡av在线网| 老司机精品视频导航| 亚洲一区二区三区四区中文字幕 | 日韩精品亚洲一区| 中文字幕一区二区三区在线播放 | 欧美日韩卡一卡二| 成人h精品动漫一区二区三区| 日韩国产欧美三级| ...中文天堂在线一区| 欧美精品一区二区三| 在线播放亚洲一区| 91黄色免费网站| 成人一道本在线| 国产一区二区三区电影在线观看 | 国产精品久久久久久户外露出| 日韩欧美资源站| 精品视频在线视频| 色婷婷av一区二区三区gif| 国产精品资源站在线| 日本女人一区二区三区| 亚洲电影在线播放| 亚洲精品乱码久久久久久久久 | 色狠狠色狠狠综合| 成人黄色片在线观看| 激情综合网激情| 免费看欧美美女黄的网站|