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

📄 previewdialog.cpp

📁 虚拟打印机
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	//			::CalculateZoomFromMosaicSize(m_rsResized.szMosaic, m_rsResized, m_psResized, m_ssResized, fulldim);	//		m_rsResized.dZoom = dMosaicZoom;	//	} break;	//	case RenderSpec::eZoom: {	//		SIZE szZoomMosaic;	//		if (this->ReadAutoRotate()) {	//			BOOL bRot;	//			::CalculateMosaicSizeFromZoomWithRotation(szZoomMosaic, bRot, m_rsResized.dZoom, 	//				m_rsResized, m_psResized, m_ssResized);	//			if (bRot) {	//				::ReflectPageSpec(m_psResized, m_psResized);	//				this->m_bRotatedPSResized = ! this->m_bRotatedPSResized;	//			}	//		} else {	//			::CalculateMosaicSizeFromZoom(szZoomMosaic, m_rsResized.dZoom, m_rsResized, m_psResized, m_ssResized);	//		}	//		m_rsResized.szMosaic = szZoomMosaic;	//	} break;	//	default:	//		ASSERTFAIL();	//		break;	//}// WAS PLACED INTO SELECTPAGE (THIS COMMENT: 6/3)#if 0		uint uiPage = 0;		this->WriteSelectedPage(uiPage);		// FIX - SOME SETTINGS SHOULD BE FROM THE PR DEVMODE		// ****		// **** SET UP THE RESIZED OUTPUT ViewablePrintPagesList 		// ****		tstring tstrPrinterName;		this->ReadSelectedPrinter(tstrPrinterName);		PDEVMODE pdmOutputPrinter = m_pdmKeeper->GetDevMode(tstrPrinterName);		// FIX NOTE - THIS SEEMS TO BE GIVING IMAGE WITIN THE PHYSICAL (OR PRINTABLE) PAGE, FIX SOURCE SPEC CALC		// WILL NEED TO GET THE PHYS PAGE SIZE OR SOMETHING FROM THE TARGET PRINTER DEV MODE		// SOURCE SPEC - BY DEFAULT, SELECTION IS TOTAL BOUNDS		HENHMETAFILE hMeta = m_pDataSource->GetPageEMF(uiPage);		// FIX - DEBUG		//HENHMETAFILE hMeta = NULL;		//{		//	HDC hdcMeta = ::CreateEnhMetaFile(NULL, NULL, NULL, TEXT("XYZ Graphics Editor\0Bald Eagle\0\0"));		//	DrawTestImage(hdcMeta);		//	ghMeta = hMeta = ::CloseEnhMetaFile(hdcMeta);		//}		// SOURCE SPEC		::GetEnhMetafileFrame_Inches(m_ssResized.rdTotalImage_Inches, hMeta);		m_ssResized.rdSelection_Inches = m_ssResized.rdTotalImage_Inches;		// PAGE SPEC		::GetPageSpec(m_psResized, pdmOutputPrinter);		m_bRotatedPSResized = FALSE;		// RENDER SPEC 		// 5/30 MOVE TO PAGESPEC		//m_rsResized.dOverlapMargin_Inches = OVERLAPPED_MARGIN_INCHES;		BOOL bHasCutGuideMargins = this->ReadNoCutGuidelines();		if (bHasCutGuideMargins) {			m_rsResized.bCutGuides = TRUE;			// 5/30 MOVE TO PAGESPEC			//m_rsResized.dCutGuideMargin_Inches = this->GetCutGuideMargins();		} else {			m_rsResized.bCutGuides = FALSE;		}		m_rsResized.bBW = this->ReadBW();		m_rsResized.bCenter = RENDERSPEC_CENTER_RESIZED;		// 5/30 MOVE TO PAGESPEC		// SHOULD THESE BE FORCED TO AT LEAST BE EVEN? ( FIX )		//RECTD rdMinEdgeMargins;		//::GetMinimumPageMargins(rdMinEdgeMargins, m_psResized);		//m_rsResized.rdEdgeMargins_Inches.left = max(PAGE_MARGIN_LEFT, rdMinEdgeMargins.left);		//m_rsResized.rdEdgeMargins_Inches.top = max(PAGE_MARGIN_TOP, rdMinEdgeMargins.top);		//m_rsResized.rdEdgeMargins_Inches.right = max(PAGE_MARGIN_RIGHT, rdMinEdgeMargins.right);		//m_rsResized.rdEdgeMargins_Inches.bottom = max(PAGE_MARGIN_BOTTOM, rdMinEdgeMargins.bottom);		// FIX -- THE SPECIFICATIONS SHOULD BE WITHIN RANGES		// SUCH THAT LIMITS ON USER ENTRIES AREN'T VIOLATED		// MAYBE ZOOM LIMITS SHOULD BE BASED ON MOSAIC SIZE				m_rsResized.szMosaic.cx = 1;		m_rsResized.szMosaic.cy = 1;		m_rsResized.mode = RenderSpec::eMosaic;		RenderSpec::MosaicFullDimension fulldim;		m_rsResized.dZoom = ::CalculateZoomFromMosaicSize(m_rsResized.szMosaic, m_rsResized, m_psResized, m_ssResized, fulldim);		this->WriteZoom(m_rsResized.dZoom);		this->ResetResizedViewableList();		// ****		// **** SET UP THE ORIGINAL SOURCE ViewablePrintPagesList ***		// ****		PCDEVMODE pdmTargetPrinter = m_pDataSource->GetTargetPrinterDevMode();		if (pdmTargetPrinter == NULL) {			pdmTargetPrinter = (PCDEVMODE) m_pDataSource->GetPRDevMode();		}				ASSERT(pdmTargetPrinter != NULL);		// SOURCE SPEC		m_ssOriginal = m_ssResized;		// PAGE SPEC		::GetPageSpec(m_psOriginal, pdmTargetPrinter);		// RENDER SPEC 		// NOT ACTUALLY USED		// 5/30 MOVE TO PAGESPEC		//m_rsOriginal.dOverlapMargin_Inches = 0;		m_rsOriginal.bCutGuides = FALSE;		m_rsOriginal.bBW = FALSE; // FIX - GET THIS FROM THE DEVMODE		m_rsOriginal.bCenter = RENDERSPEC_CENTER_ORIGINAL;		// FOR ORIGINAL, BELIEVE NEED MINIMUM MARGINS, AND THEN DON'T CENTER THE OUTPUT		// MS WORDPAD MAY NOT BE GIVING A METAFILE THAT IS OF MAXIMUM SIZE GIVEN THE MARGINS ?		// THIS WAS BASED ON A DEFAULT DEVMODE, NOT THE TARGET, SO RECHECK		// 5/30 MOVE TO PAGESPEC		//::GetMinimumPageMargins(rdMinEdgeMargins, m_psOriginal);		//m_rsOriginal.rdEdgeMargins_Inches = rdMinEdgeMargins;				m_rsOriginal.mode = RenderSpec::eZoom;		m_rsOriginal.dZoom = 1.0;		// OBVIOUSLY THIS SHOULD WORK OUT TO 1x1		::CalculateMosaicSizeFromZoom(m_rsOriginal.szMosaic, m_rsOriginal.dZoom, m_rsOriginal, m_psOriginal, m_ssOriginal);		::PRListViewDialog *pprlvdOrig = this->GetOriginalSourceDialog();		::ViewablePrintPagesList *pvpplOrig = new ::ViewablePrintPagesList(hMeta, m_rsOriginal, m_psOriginal, m_ssOriginal);		pvpplOrig = (ViewablePrintPagesList *) pprlvdOrig->SetList(pvpplOrig, m_prdp, ListViewWindow::eSelectBox, m_szdMinSelectionBox);		if (pvpplOrig != NULL) {			delete pvpplOrig;		}#endif// SB_LINEUP//6/3 JUST CHECK THE MOSAIC SIZE AND DO ONCE IF POSSIBLE//OLD VERSION WAS THIS BLOCK FOLLOWED VERBATIM BY CODE AFTER bOK//do {//	if (bAutoRotate) {//		BOOL bRotThisTime ;//		dZoomNew = ::FindNextSmallerMosaicSizeWithRotation(szMosaic, bRotThisTime, dZoomNew,//			m_rsResized, psTemp, m_ssResized);//		if (bRotThisTime) {//			::ReflectPageSpec(psTemp, psTemp);//			bRot = ! bRot;//		}//	} else {//		dZoomNew = ::FindNextSmallerMosaicSize(szMosaic, m_rsResized, psTemp, m_ssResized);//	}//} while( //	(dZoomOld - dZoomNew) < MIN_ZOOM_AUTOCHANGE && //	(szMosaic.cx > 1 || szMosaic.cy > 1) //);//if (dZoomOld - dZoomNew < MIN_ZOOM_AUTOCHANGE) {//	if (dZoomNew > dZoomOld) {//		dZoomNew = dZoomOld;//		szMosaic = m_rsResized.szMosaic;//		psTemp = m_psResized;//		bRot = FALSE;//	}//	mode = RenderSpec::eZoom;//	if (dZoomNew > 3.0) {//		dZoomNew -= 1.0;//	} else if (dZoomNew > 0.2) {//		dZoomNew -= 0.1;//	} else  {//		dZoomNew -= 0.01;//	} //	::CalculateMosaicSizeFromZoom(szMosaic, dZoomNew, m_rsResized, m_psResized, m_ssResized);//}// SB_LINEDOWN// 6/3 THIS CODE AND AFTER ISVALID... VERBATIM IS ORIGINAL//do {//	if (bAutoRotate) {//		BOOL bRotThisTime;//		dZoomNew = ::FindNextLargerMosaicSizeWithRotation(szMosaic, bRotThisTime, dZoomNew,//			m_rsResized, psTemp, m_ssResized);//		if (bRotThisTime) {//			bRot = ! bRot;//			::ReflectPageSpec(psTemp, psTemp);//		}//	} else {//		dZoomNew = ::FindNextLargerMosaicSize(szMosaic, dZoomNew, m_rsResized, psTemp, m_ssResized);//	}//} while(dZoomNew - dZoomOld < MIN_ZOOM_AUTOCHANGE);// 7/3 SAVE BACKUP VERSION OF SelectPage#if 0void PreviewDialog::SelectPage(uint uiPage) {	this->WriteSelectedPage(uiPage);	this->WriteOriginalAll(TRUE);	this->EnableOriginalSelection(FALSE);	this->WriteResizedAll(TRUE);	this->EnableResizedSelection(FALSE);	// ****	// **** SET THE TARGET PRINTER BASED ON DEVMODE FOR THIS PAGE	// ****	// SOME CASES NO TARGET PRINTER MAY BE SELECTED	// HOPEFULLY OTHER MEMBER FUNCTIONS DEAL WITH THIS BY SETTING DEFAULT VALUES FOR	// THE PAGE SPECIFICATION (TARGET DEVMODE DETERMINES THE RESIZED PAGE SPECIFICATION,	// AND WHETHER WE CAN DO LANDSCAPE)	{		//PCEXTDEVMODE pextdm = m_pDataSource->GetPRDevMode(uiPage);		//LPCTSTR lptstrTargetPrinterName = ::EXTDM_GetTargetPrinterName(pextdm);		tstring tstrTargetPrinterName;		PDEVMODE pdmTargetDefault = m_pDataSource->GetTargetPrinter(uiPage, tstrTargetPrinterName);		//if (this->WriteSelectedPrinter(tstrTargetPrinterName.c_str())) {			if (pdmTargetDefault != NULL && this->WriteSelectedPrinter(tstrTargetPrinterName.c_str())) {				//PCDEVMODE pdmTargetDefault = ::EXTDM_GetTargetPrinterDevMode(pextdm);			//if (pdmTargetDefault != NULL) {				PDEVMODE pdmTarget = m_pdmKeeper->GetDevMode(tstrTargetPrinterName.c_str());				if (pdmTarget != NULL) {					// THIS COPIES OVER TARGET DEFAULT DEVMODE FROM DATA FILE TO OUR TARGET DEVMODE					// MAKING SURE NOT TO OVERFLOW THE BUFFER BECAUSE OF A VERSION DIFFERENCE					::ConvertDevMode(pdmTarget, pdmTargetDefault, FALSE);				}				m_pdmKeeper->SetDevMode();				//::EXTDM_ReleaseTargetPrinterDevMode(pextdm, pdmTargetDefault);			//}		} else {			LPTSTR lptstrTemp = ::ChooseTargetPrinterNameWithoutUserInput();			if (lptstrTemp != NULL) {				if (this->WriteSelectedPrinter(lptstrTemp)) {					//PCDEVMODE pdmTargetDefault = ::EXTDM_GetTargetPrinterDevMode(pextdm);					if (pdmTargetDefault != NULL) {						PDEVMODE pdmTarget = m_pdmKeeper->GetDevMode(lptstrTemp);						if (pdmTarget != NULL) {							// THIS HAS THE EFFECT OF SETTING THE PUBLIC MEMBERS OF THE TARGET							// TO THE DEFAULT VALUES FROM THE DATA FILE, EVEN THOUGH THIS IS A DIFFERENT PRINTER							// THEN WE WILL VALIDATE, AND THE DRIVER WILL DO THE BEST IT CAN TO MATCH							DWORD dmDriverExtra = pdmTarget->dmDriverExtra;							pdmTarget->dmDriverExtra = 0;							::ConvertDevMode(pdmTarget, pdmTargetDefault, FALSE);							pdmTarget->dmDriverExtra = dmDriverExtra;							m_pdmKeeper->SetDevMode();						}						//::EXTDM_ReleaseTargetPrinterDevMode(pextdm, pdmTargetDefault);					}				}				free(lptstrTemp);			} 		}		if (pdmTargetDefault != NULL) {			free(pdmTargetDefault);		}	} // SELECT TARGET PRINTER BLOCK	// ****	// **** SET UP THE RESIZED OUTPUT ViewablePrintPagesList 	// ****	// 7/1	// DEBUG / FIX -- THIS COULD FAIL, IN WHICH CASE I GUESS WE ABORT SHOWING THE PAGE !!!	this->UpdateResizedPageSpec();	// HMETA IS GIVEN TO ORIGINAL SOURCE VIEW DIALOG'S ViewablePrintPagesList (WHICH WILL OWN IT)	HENHMETAFILE hMeta = m_pDataSource->GetPageEMF(uiPage);	// SOURCE SPEC	//::GetEnhMetafileFrame_Inches(m_ssResized.rdTotalImage_Inches, hMeta);	//m_ssResized.rdSelection_Inches = m_ssResized.rdTotalImage_Inches;	this->GetResizedSourceSpecForPage(uiPage, hMeta, m_ssResized);	// SETTING THE VIEWABLELIST FOR THE ORIGINAL SOURCE DIALOG CAUSES ANY 	// CURRENT SELECTION TO BE CLEARED, THEREFORE WE HAVE TO SAVE THIS IN A SEPARATE VARIABLE	// AND SET THE SELECTION AT THE END, AFTER THAT LIST HAS BEEN SET	RECTD rdSourceSelection = m_ssResized.rdSelection_Inches;	// RENDER SPEC	::RenderSpec rsTemp;	if (m_pDataSource->GetResizedRenderSpec(uiPage, rsTemp)) {		m_rsResized = rsTemp;		this->MakeZoomSettingsConsistent();		this->WriteNoCutGuidelines(m_rsResized.bCutGuides);	} else {		BOOL bHasCutGuideMargins = this->ReadNoCutGuidelines();		if (bHasCutGuideMargins) {			m_rsResized.bCutGuides = TRUE;		} else {			m_rsResized.bCutGuides = FALSE;		}		//m_rsResized.bBW = this->ReadBW();		m_rsResized.bCenter = RENDERSPEC_CENTER_RESIZED;		m_rsResized.szMosaic.cx = 1;		m_rsResized.szMosaic.cy = 1;		m_rsResized.mode = RenderSpec::eMosaic;		RenderSpec::MosaicFullDimension fulldim;		m_rsResized.dZoom = ::CalculateZoomFromMosaicSize(m_rsResized.szMosaic, m_rsResized, m_psResized, m_ssResized, fulldim);	}	this->WriteZoom(m_rsResized.dZoom);	this->ResetResizedViewableList();	// ****	// **** SET UP THE ORIGINAL SOURCE ViewablePrintPagesList ***	// ****	this->UpdateOriginalPageSpec();	// SOURCE SPEC	//m_ssOriginal = m_ssResized;	//RECTD rdSourceSelection_Inces;	//// DEBUG / FIX -- THIS SHOULD PROBABLY BE DONE TO m_ssResized INSTEAD	//if (m_pDataSource->GetSourceSelection(uiPage, rdSourceSelection_Inces)) {	//	m_ssOriginal.rdSelection_Inches = rdSourceSelection_Inces;	//}	m_ssOriginal.rdSelection_Inches = m_ssOriginal.rdTotalImage_Inches = m_ssResized.rdTotalImage_Inches;	// RENDER SPEC 	m_rsOriginal.bCutGuides = FALSE;	//m_rsOriginal.bBW = FALSE; // FIX - GET THIS FROM THE DEVMODE	m_rsOriginal.bCenter = RENDERSPEC_CENTER_ORIGINAL;	// 7/1 ***** BIG CHANGE ***	//m_rsOriginal.mode = RenderSpec::eMosaic;	//m_rsOriginal.szMosaic.cx = 1;	//m_rsOriginal.szMosaic.cy = 1;	//::RenderSpec::MosaicFullDimension mfd;	//m_rsOriginal.dZoom = ::CalculateZoomFromMosaicSize(m_rsOriginal.szMosaic, 	//	m_rsOriginal, m_psOriginal, m_ssOriginal, mfd);	m_rsOriginal.mode = RenderSpec::eZoom;	m_rsOriginal.dZoom = 1;	m_rsOriginal.szMosaic.cx = 1;	m_rsOriginal.szMosaic.cy = 1;	// HOPEFULLY WE CAN JUST USE THIS HARD-CODED WHETHER IT FITS OR NOT (SHOULD BE ONLY SLIGHTLY OFF UNLESS	// WE'RE USING DEFAULT PAGESPEC BECUASE PAGESPEC RESULTED IN SOME KIND OF ERROR)	//::RenderSpec::MosaicFullDimension mfd;	//m_rsOriginal.dZoom = ::CalculateZoomFromMosaicSize(m_rsOriginal.szMosaic, 	//	m_rsOriginal, m_psOriginal, m_ssOriginal, mfd);	// 7/1 ***** EO BIG CHANGE ***	::PRListViewDialog *pprlvdOrig = this->GetOriginalSourceDialog();	::ViewablePrintPagesList *pvpplOrig = new ::ViewablePrintPagesList(hMeta, m_rsOriginal, m_psOriginal, m_ssOriginal);	pvpplOrig = (ViewablePrintPagesList *) pprlvdOrig->SetList(pvpplOrig, m_prdp, ListViewWindow::eSelectBox, m_szdMinSelectionBox);	if (pvpplOrig != NULL) {		delete pvpplOrig;	}		// 7/1 NEW ****	if (memcmp(& m_ssResized.rdTotalImage_Inches, & rdSourceSelection, sizeof(m_ssResized.rdTotalImage_Inches)) != 0) {		::PRListViewDialog* pprlvd = this->GetOriginalSourceDialog();				const ::ListViewWindow* plvw = pprlvd->GetListViewWindow();		const ::ViewableList *pvl = plvw->GetList();		RECTD rdItem;		pvl->GetItemSelectableBounds(0, rdItem);		RECTD rdSelectionForList = rdSourceSelection;		::OffsetRect(rdSelectionForList, 			rdItem.left - m_ssResized.rdTotalImage_Inches.left, 			rdItem.top - m_ssResized.rdTotalImage_Inches.top			);		// FINAL 'TRUE' ARGUMENT GIVES US A FEED-BACK NOTIFICATION, WHICH WILL SET		// THE SELECTION AS IF THE USER HAD DONE IT (OR REJECT IT BASED ON THE USUAL CRITERIA)		pprlvd->SetArrowSelectionBox(TRUE, &rdSelectionForList, TRUE);		//this->EnableOriginalSelection(TRUE);		//this->WriteOriginalAll(FALSE);	}		// 7/1 NEW ****}BOOL PreviewDialog::SetSourceSelection(IN BOOL bHasSelection, IN const RECTD* prdSelection_Inches) {	BOOL bRetValue = TRUE;	if (bHasSelection) {		if (! ::EqualRect(*prdSelection_Inches, m_ssResized.rdSelection_Inches) ) {			if (this->IsValidSourceSelection(*prdSelection_Inches)) {				m_ssResized.rdSelection_Inches = *prdSelection_Inches;				this->MakeZoomSettingsConsistent();				this->WriteZoom(m_rsResized.dZoom);				this->ResetResizedViewableList();			} else {				bRetValue = FALSE;				this->ErrorMessage(TEXT("Unable to select area from original source.  Using all of source."));				// RECALL RECURSIVELY, RESULTS IN "else" BLOCK BELOW BEING EXECUTED				this->SetSourceSelection(FALSE, NULL);			}		}	} else {		if (! ::EqualRect(m_ssResized.rdSelection_Inches, m_ssResized.rdTotalImage_Inches) ) {			m_ssResized.rdSelection_Inches = m_ssResized.rdTotalImage_Inches;			this->MakeZoomSettingsConsistent();			this->WriteZoom(m_rsResized.dZoom);			this->ResetResizedVi

⌨️ 快捷键说明

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