// ABCView.cpp : implementation of the CABCView class // #include "stdafx.h" #include "ABCDemo.h" #include "ABCDoc.h" #include "ABCView.h" #include "MainFrm.h" #include "leadraster.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif extern CABCApp theApp; ///////////////////////////////////////////////////////////////////////////// // CABCView IMPLEMENT_DYNCREATE(CABCView, CFormView) BEGIN_MESSAGE_MAP(CABCView, CFormView) //{{AFX_MSG_MAP(CABCView) ON_WM_SIZE() ON_COMMAND(ID_VIEW_NORMAL, OnViewNormal) ON_UPDATE_COMMAND_UI(ID_VIEW_NORMAL, OnUpdateViewNormal) ON_COMMAND(ID_VIEW_FITIMAGETOWINDOW, OnViewFitimagetowindow) ON_UPDATE_COMMAND_UI(ID_VIEW_FITIMAGETOWINDOW, OnUpdateViewFitimagetowindow) ON_COMMAND(ID_VIEW_SNAPWINDOWTOIMAGE, OnViewSnapwindowtoimage) ON_UPDATE_COMMAND_UI(ID_VIEW_SNAPWINDOWTOIMAGE, OnUpdateViewSnapwindowtoimage) ON_COMMAND(ID_VIEW_ZOOMIN2X, OnViewZoomin2x) ON_COMMAND(ID_VIEW_ZOOMOUT2X, OnViewZoomout2x) ON_COMMAND(ID_FILE_SAVE_AS, OnFileSaveAs) ON_COMMAND(ID_FILE_SAVE_MULTI_PAGE, OnFileSaveMultiPage) ON_UPDATE_COMMAND_UI(ID_FILE_SAVE_AS, OnUpdateFileSaveAs) ON_UPDATE_COMMAND_UI(ID_FILE_SAVE_MULTI_PAGE, OnUpdateFileSaveMultiPage) ON_COMMAND(ID_FILE_SAVE_AS_TIFF, OnFileSaveAsTiff) ON_UPDATE_COMMAND_UI(ID_FILE_SAVE_AS_TIFF, OnUpdateFileSaveAsTiff) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CABCView construction/destruction CABCView::CABCView() : CFormView(CABCView::IDD) { //{{AFX_DATA_INIT(CABCView) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT // TODO: add construction code here m_nViewMode = VIEW_NORMAL; m_nZoom = 100; } CABCView::~CABCView() { } void CABCView::DoDataExchange(CDataExchange* pDX) { CFormView::DoDataExchange(pDX); //{{AFX_DATA_MAP(CABCView) DDX_Control(pDX, IDC_LEADRASTERVIEW, m_LEADRasterView); //}}AFX_DATA_MAP } BOOL CABCView::PreCreateWindow(CREATESTRUCT& cs) { // TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs return CFormView::PreCreateWindow(cs); } void CABCView::OnInitialUpdate() { CFormView::OnInitialUpdate(); CABCDoc * pDoc = (CABCDoc *)GetDocument(); m_LEADRasterView.GetRaster().SetBitmap(pDoc->m_pLEADRaster->Bitmap); int xExt = (int)pDoc->m_pLEADRaster->BitmapWidth; int yExt = (int)pDoc->m_pLEADRaster->BitmapHeight; // Make the CLEADRasterView control to fit the bitmap and disable CLEADRasterView's scrolling // Make the form scroll if the window becomes smaller than the bitmap SetScrollSizes(MM_TEXT,CSize(xExt,yExt)); // Make the window fit the image GetParentFrame()->RecalcLayout(); ResizeParentToFit(); // now disable the scroll bars SetScrollSizes(MM_TEXT,CSize(1,1)); m_LEADRasterView.SetBackErase(FALSE); RECT rcMain; CFrameWnd * pParent; HWND hWndMDIClient; SetZoom(100); //Snap window or fit image? hWndMDIClient = ((CMDIFrameWnd *)AfxGetMainWnd())->m_hWndMDIClient; ::GetClientRect(hWndMDIClient,&rcMain); pParent = GetParentFrame(); pParent->RecalcLayout(); rcMain.right -= rcMain.left; rcMain.bottom -= rcMain.top; OnViewFitimagetowindow(); pParent->SetWindowPos(NULL,0,0,rcMain.right,rcMain.bottom,SWP_NOZORDER); } ///////////////////////////////////////////////////////////////////////////// // CABCView printing BOOL CABCView::OnPreparePrinting(CPrintInfo* pInfo) { // default preparation return DoPreparePrinting(pInfo); } void CABCView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) { // TODO: add extra initialization before printing } void CABCView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) { // TODO: add cleanup after printing } void CABCView::OnPrint(CDC* pDC, CPrintInfo* /*pInfo*/) { // TODO: add customized printing code here } ///////////////////////////////////////////////////////////////////////////// // CABCView diagnostics #ifdef _DEBUG void CABCView::AssertValid() const { CFormView::AssertValid(); } void CABCView::Dump(CDumpContext& dc) const { CFormView::Dump(dc); } CABCDoc* CABCView::GetDocument() // non-debug version is inline { ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CABCDoc))); return (CABCDoc*)m_pDocument; } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CABCView message handlers void CABCView::OnSize(UINT nType, int cx, int cy) { CFormView::OnSize(nType, cx, cy); if (IsWindow(m_LEADRasterView.m_hWnd)) { m_LEADRasterView.SetBackErase(FALSE); m_LEADRasterView.MoveWindow(0, 0, cx, cy); } } void CABCView::OnViewNormal() { m_LEADRasterView.SetPaintSizeMode(PAINTSIZEMODE_NORMAL); SetZoom(100); m_nViewMode = VIEW_NORMAL; } void CABCView::OnUpdateViewNormal(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_nViewMode==VIEW_NORMAL); } void CABCView::OnViewFitimagetowindow() { m_LEADRasterView.SetPaintSizeMode(PAINTSIZEMODE_FIT); m_nViewMode = VIEW_FIT; } void CABCView::OnUpdateViewFitimagetowindow(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_nViewMode==VIEW_FIT); } void CABCView::OnViewSnapwindowtoimage() { CWnd* pFrame = GetParent(); CRect rcWindow; CRect rcClient; pFrame->ShowWindow(SW_NORMAL); GetClientRect(&rcClient); pFrame->GetWindowRect(&rcWindow); pFrame->GetParent()->ScreenToClient (rcWindow); pFrame->MoveWindow(rcWindow.left, rcWindow.top, rcWindow.Width() + (int) m_LEADRasterView.GetDstWidth() - rcClient.Width(), rcWindow.Height() + (int) m_LEADRasterView.GetDstHeight() - rcClient.Height()); m_nViewMode = VIEW_SNAP; } void CABCView::OnUpdateViewSnapwindowtoimage(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_nViewMode==VIEW_SNAP); pCmdUI->Enable(m_nViewMode!=VIEW_FIT); } void CABCView::OnViewZoomin2x() { if (m_nZoom <= 800) m_nZoom = min(800, m_nZoom * 2); if (m_nZoom == 100) m_nViewMode = VIEW_NORMAL; else m_nViewMode = VIEW_ZOOM; SetZoom(m_nZoom); } void CABCView::OnViewZoomout2x() { if (m_nZoom >= 6) m_nZoom = max(6, m_nZoom / 2); if (m_nZoom == 100) m_nViewMode = VIEW_NORMAL; else m_nViewMode = VIEW_ZOOM; SetZoom(m_nZoom); } void CABCView::SetZoom(int nZoom) { m_nZoom = nZoom; if (m_LEADRasterView.GetRaster().GetBitmap()) m_LEADRasterView.SetPaintZoomFactor((float)m_nZoom); } void CABCView::FitImageToWindow() { OnViewFitimagetowindow(); } void CABCView::OnFileSaveAs() { HCURSOR hCursor = NULL; int nRet = 0; #if(WINVER >= 0x0400) theApp.m_OpenFileName.Flags |= OFN_ENABLESIZING; #endif /* WINVER >= 0x0400 */ CString csFileName(theApp.m_szOpenedFileName); if (csFileName.IsEmpty()) { csFileName = TEXT("Test.abc"); } else { int z = csFileName.ReverseFind('.'); if( z > 0 ) csFileName = csFileName.Left( z ); csFileName += TEXT("_Abc_"); csFileName += theApp.m_szQuality; csFileName += TEXT(".abc"); } CString csFilter; csFilter = TEXT("LEAD ABC Format (*.abc)|*.abc||"); CFileDialog cfdSave(FALSE, TEXT("abc"), csFileName, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, csFilter, NULL); cfdSave.m_ofn.lpstrTitle = TEXT("Save Current As ABC"); nRet = cfdSave.DoModal(); csFileName = cfdSave.GetPathName(); if (nRet == IDOK) { CABCDoc * pDoc = GetDocument(); hCursor = SetCursor (LoadCursor (NULL, IDC_WAIT)); ILEADRaster * pRaster = NULL; HRESULT hr = CoCreateInstance(CLSID_LEADRaster, NULL, CLSCTX_ALL, IID_ILEADRaster, (void**)&pRaster); if (FAILED(hr)) return; nRet = theApp.m_pRasterIO->Load(pRaster, (LPCTSTR)theApp.m_szOpenedFileName, 0, theApp.m_nPageNumber, 1); nRet = theApp.m_pRasterIO->Save(pRaster, (LPCTSTR)csFileName, FILE_ABC, 1, (QFactorConstants)theApp.m_Quality, 0); if (nRet != 0) { theApp.DisplayLEADError(nRet); SetCursor(hCursor); return; } else { pDoc->SetModifiedFlag(FALSE); } pDoc->SetModifiedFlag(FALSE); SetCursor (hCursor); } } void CABCView::OnFileSaveMultiPage() { HCURSOR hCursor = NULL; int nRet = 0; #if(WINVER >= 0x0400) theApp.m_OpenFileName.Flags |= OFN_ENABLESIZING; #endif /* WINVER >= 0x0400 */ CString csFileName(theApp.m_szOpenedFileName); if( csFileName.IsEmpty() ) { csFileName = TEXT("Test.tif"); } else { int z = csFileName.ReverseFind('.'); if( z > 0 ) csFileName = csFileName.Left( z ); csFileName += TEXT("_M_"); csFileName += theApp.m_szQuality; csFileName += TEXT(".tif"); } CString csFilter; csFilter = TEXT("TIFF LEAD ABC Format (*.tif)|*.tif||"); CFileDialog cfdSave(FALSE, TEXT("tif"), csFileName, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, csFilter, NULL); cfdSave.m_ofn.lpstrTitle = TEXT("Save All Pages"); nRet = cfdSave.DoModal(); csFileName = cfdSave.GetPathName(); if (nRet == IDOK) { CABCDoc * pDoc = GetDocument(); hCursor = SetCursor(LoadCursor (NULL, IDC_WAIT)); if (theApp.m_bCombine) nRet = pDoc->SaveTIFFABCCombined(theApp.m_Quality, theApp.m_szOpenedFileName, csFileName); else nRet = pDoc->SaveTIFFABC(theApp.m_Quality, theApp.m_szOpenedFileName, csFileName); if (nRet != 0) { theApp.DisplayLEADError(nRet); SetCursor(hCursor); return; } else { pDoc->SetModifiedFlag(FALSE); } pDoc->SetModifiedFlag(FALSE); SetCursor(hCursor); } } void CABCView::OnUpdateFileSaveAs(CCmdUI* pCmdUI) { pCmdUI->Enable(theApp.m_Quality > -1); } void CABCView::OnUpdateFileSaveMultiPage(CCmdUI* pCmdUI) { pCmdUI->Enable(theApp.m_Quality > -1); } void CABCView::OnFileSaveAsTiff() { HCURSOR hCursor = NULL; INT nRet; #if(WINVER >= 0x0400) theApp.m_OpenFileName.Flags |= OFN_ENABLESIZING; #endif /* WINVER >= 0x0400 */ CString csFileName(theApp.m_szOpenedFileName); if (csFileName.IsEmpty()) { csFileName = TEXT("Test.tif"); } else { int z = csFileName.ReverseFind('.'); if (z > 0) csFileName = csFileName.Left(z); csFileName += TEXT("_Tiff_"); csFileName += theApp.m_szQuality; csFileName += TEXT(".tif"); } CFileDialog cfdSave(FALSE, TEXT("tif"), csFileName, OFN_HIDEREADONLY, TEXT("TIFF LEAD ABC Format (*.tif)|*.tif||"), NULL); cfdSave.m_ofn.lpstrTitle = TEXT("Save Current As TIFF"); nRet = cfdSave.DoModal(); csFileName = cfdSave.GetPathName(); if (nRet == IDOK) { CABCDoc * pDoc = GetDocument(); hCursor = SetCursor (LoadCursor (NULL, IDC_WAIT)); ILEADRaster * pRaster = NULL; HRESULT hr = CoCreateInstance(CLSID_LEADRaster, NULL, CLSCTX_ALL, IID_ILEADRaster, (void**)&pRaster); if (FAILED(hr)) return; nRet = theApp.m_pRasterIO->Load(pRaster, (LPCTSTR)theApp.m_szOpenedFileName, 0, theApp.m_nPageNumber, 1); nRet = theApp.m_pRasterIO->Save(pRaster, (LPCTSTR)csFileName, FILE_TIF_ABC, 1, (QFactorConstants)theApp.m_Quality, SAVE_APPEND); if (nRet != 0) { theApp.DisplayLEADError(nRet); SetCursor(hCursor); return; } else { pDoc->SetModifiedFlag(FALSE); } pDoc->SetModifiedFlag(FALSE); SetCursor(hCursor); } } void CABCView::OnUpdateFileSaveAsTiff(CCmdUI* pCmdUI) { pCmdUI->Enable(theApp.m_Quality > -1); } void CABCView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint) { m_LEADRasterView.SetBitonalScaling(theApp.m_nViewScale); }