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