// ZoomViewView.cpp : implementation of the CZoomViewView class // #include "stdafx.h" #include "LeadRaster.h" #include "ZoomViewOptionsDlg.h" #include "RangeDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif #define LEFT_BUTTON 1 #define RIGHT_BUTTON 2 #define FACTOR 100 extern CZoomViewApp theApp; ///////////////////////////////////////////////////////////////////////////// // CZoomViewView #define MIN_WIDTH 20 #define MIN_HEIGHT 20 IMPLEMENT_DYNCREATE(CZoomViewView, CFormView) BEGIN_MESSAGE_MAP(CZoomViewView, CFormView) //{{AFX_MSG_MAP(CZoomViewView) ON_WM_SIZE() ON_COMMAND(ID_FILE_SAVE, OnFileSave) ON_COMMAND(ID_EDIT_COPY, OnEditCopy) ON_COMMAND(IDM_ZOOMVIEW_OPTIONS, OnZoomViewOptions) ON_COMMAND(IDM_ZOOMVIEW_DELETE, OnZoomViewDelete) ON_COMMAND(ID_VIEW_NORMAL, OnViewNormal) ON_WM_ERASEBKGND() 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_ZOOM, OnViewZoom) ON_UPDATE_COMMAND_UI(ID_VIEW_ZOOM, OnUpdateViewZoom) ON_COMMAND(ID_VIEW_HILITEIMAGE, OnViewHiliteimage) ON_UPDATE_COMMAND_UI(ID_VIEW_HILITEIMAGE, OnUpdateViewHiliteimage) ON_COMMAND(IDM_ABOUT, OnAbout) ON_WM_DESTROY() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CZoomViewView construction/destruction CZoomViewView::CZoomViewView() : CFormView(CZoomViewView::IDD) { //{{AFX_DATA_INIT(CZoomViewView) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT // TODO: add construction code here m_nZoomViewIndex = -1; } CZoomViewView::~CZoomViewView() { } void CZoomViewView::DoDataExchange(CDataExchange* pDX) { CFormView::DoDataExchange(pDX); //{{AFX_DATA_MAP(CZoomViewView) DDX_Control(pDX, IDC_LEADRASTERVIEW, m_RasterView); //}}AFX_DATA_MAP } BOOL CZoomViewView::PreCreateWindow(CREATESTRUCT& cs) { return CFormView::PreCreateWindow(cs); } void CZoomViewView::OnInitialUpdate() { CFormView::OnInitialUpdate(); CZoomViewDoc *pDoc = (CZoomViewDoc *)GetDocument(); ILEADRaster *pRaster =pDoc->m_pRaster; pRaster->RefBitmap = TRUE; m_RasterView.GetRaster().SetBitmap(pRaster->Bitmap); int xExt = (int)pRaster->BitmapWidth, yExt = (int)pRaster->BitmapHeight; // Make the CLead control to fit the bitmap and disable CLead'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_RasterView.SetBackErase(FALSE); m_RasterView.SetDoubleBuffer(TRUE); m_RasterView.SetAutoSetRects(TRUE); IDispatch *pDispatch=NULL; (m_RasterView.GetControlUnknown())->QueryInterface(IID_IDispatch, (void**)&pDispatch); if(pDispatch==NULL) return ; theApp.m_pRasterAnn->PutAnnParentRasterView(pDispatch); theApp.m_pRasterAnn->PutAnnUserMode(ANN_USERMODE_RUN); theApp.m_pRasterAnn->AnnLoad(pDoc->m_strAnnFile, 1); if(pDispatch) pDispatch->Release(); } ///////////////////////////////////////////////////////////////////////////// // CZoomViewView diagnostics #ifdef _DEBUG void CZoomViewView::AssertValid() const { CFormView::AssertValid(); } void CZoomViewView::Dump(CDumpContext& dc) const { CFormView::Dump(dc); } CZoomViewDoc* CZoomViewView::GetDocument() // non-debug version is inline { ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CZoomViewDoc))); return (CZoomViewDoc*)m_pDocument; } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CZoomViewView message handlers void CZoomViewView::OnSize(UINT nType, int cx, int cy) { CFormView::OnSize(nType, cx, cy); if( IsWindow(m_RasterView.m_hWnd) ) { m_RasterView.SetBackErase(FALSE); m_RasterView.MoveWindow(0, 0, cx, cy); } } void CZoomViewView::OnFileSave() { theApp.m_pRasterFileDlg->PutBitmap (m_RasterView.GetRaster().GetBitmap()); theApp.m_pRasterFileDlg->PutEnableMethodErrors(FALSE); theApp.m_pRasterFileDlg->PutFileDlgFlags(0); theApp.m_pRasterFileDlg->PutUIFlags(SAVE_AUTOPROCESS | SAVE_SHOW_FILEOPTIONS_MULTIPAGE | SAVE_SHOW_FILEOPTIONS_PROGRESSIVE | SAVE_SHOW_FILEOPTIONS_QFACTOR| SAVE_SHOW_FILEOPTIONS_STAMP | SAVE_SHOW_FILEOPTIONS_BASICJ2KOPTIONS| SAVE_SHOW_FILEOPTIONS_J2KOPTIONS); theApp.m_pRasterFileDlg->PutDialogTitle("Save File"); int nRet = theApp.m_pRasterFileDlg->ShowSaveDlg((long)this->m_hWnd); if(nRet !=0) { theApp.DisplayLEADError(nRet); } theApp.m_pRasterFileDlg->PutBitmap(0); } void CZoomViewView::OnEditCopy() { BeginWaitCursor(); m_RasterView.GetRaster().Copy(COPY_DIB | COPY_DDB | COPY_PALETTE); EndWaitCursor(); } BEGIN_EVENTSINK_MAP(CZoomViewView, CFormView) //{{AFX_EVENTSINK_MAP(CZoomViewView) ON_EVENT(CZoomViewView, IDC_LEADRASTERVIEW, 5 /* MouseUp */, OnMouseUpLeadRasterView, VTS_I2 VTS_I2 VTS_R4 VTS_R4) ON_EVENT(CZoomViewView, IDC_LEADRASTERVIEW, 4 /* MouseDown */, OnMouseDownLeadRasterView, VTS_I2 VTS_I2 VTS_R4 VTS_R4) ON_EVENT(CZoomViewView, IDC_LEADRASTERVIEW, 15 /* KeyPress */, OnKeyPressLeadRasterView, VTS_I2) ON_EVENT(CZoomViewView, IDC_LEADRASTERVIEW, 16 /* KeyDown */, OnKeyDownLeadRasterView, VTS_I2 VTS_I2) //}}AFX_EVENTSINK_MAP END_EVENTSINK_MAP() void CZoomViewView::OnMouseUpLeadRasterView(short Button, short Shift, float x, float y) { CMenu ContextMenu; CMenu* pMenu = NULL; POINT pt, ptMenu; ptMenu.x = (long)x; ptMenu.y = (long)y; pt.x = (long)(x - m_RasterView.GetDstLeft()); pt.y = (long)(y - m_RasterView.GetDstTop()); pt.x = (long)(pt.x / (m_RasterView.GetPaintZoomFactor() / 100.0) * FACTOR); pt.y = (long)(pt.y / (m_RasterView.GetPaintZoomFactor() / 100.0) * FACTOR); m_nZoomViewIndex = PointInZoomView(&pt); if(Button == RIGHT_BUTTON && m_nZoomViewIndex >= 0) { /* Load the context menu. */ if (ContextMenu.LoadMenu (IDR_CONTEXT_MENU)) { /* Retrieves a pointer to a pop-up menu. */ if (pMenu = ContextMenu.GetSubMenu (0)) { /* Display the pop-up menu */ ClientToScreen(&ptMenu); pMenu->TrackPopupMenu (TPM_LEFTALIGN, ptMenu.x, ptMenu.y, this); } } m_RasterView.SetRgnMarkingMode (RGNMARK_NONE); return; } if(Button == LEFT_BUTTON) { ILEADRasterZoomView * pZoomView = NULL; float fZoomFactorX; float fZoomFactorY; float fNewX; float fNewY; float fNewWidth; float fNewHeight; fZoomFactorX = m_RasterView.GetDstWidth()/ m_RasterView.GetSrcWidth(); fZoomFactorY = m_RasterView.GetDstHeight()/ m_RasterView.GetSrcHeight(); fNewX = m_RasterView.GetRaster().GetRgnLeft(); fNewY = m_RasterView.GetRaster().GetRgnTop(); fNewWidth = m_RasterView.GetRaster().GetRgnWidth(); fNewHeight = m_RasterView.GetRaster().GetRgnHeight(); HRESULT hr = CoCreateInstance( CLSID_LEADRasterZoomView, NULL, CLSCTX_ALL, IID_ILEADRasterZoomView, (void**)&pZoomView ); if(FAILED(hr)) { AfxMessageBox(TEXT("Failed to create Raster Zoom View\nThe demo will now abort.")); return; } pZoomView->SrcLeft = (long)(fNewX * FACTOR); pZoomView->SrcTop = (long)(fNewY * FACTOR); pZoomView->SrcHeight = (long)(fNewHeight * FACTOR); pZoomView->SrcWidth = (long)(fNewWidth * FACTOR); if(fNewHeight < MIN_HEIGHT || fNewWidth < MIN_WIDTH || fNewWidth >= m_RasterView.GetRaster().GetBitmapWidth() || fNewHeight >= m_RasterView.GetRaster().GetBitmapHeight()) return; pZoomView->DstLeft = (long)(pZoomView->SrcLeft + 10 * FACTOR); pZoomView->DstTop = (long)(pZoomView->SrcTop + 10 * FACTOR); pZoomView->ZoomFactor = 200; pZoomView->ForceDst = FALSE; pZoomView->Enabled = TRUE; pZoomView->BorderStyle = ZOOM_VIEW_BORDERSTYLE_3D; pZoomView->BorderColor = RGB(255,0,0); pZoomView->PenStyle = PEN_STYLE_SOLID; pZoomView->SrcBorderStyle = SOURCE_BORDERSTYLE_3D; pZoomView->SrcBorderColor = RGB(255,0,0); pZoomView->SrcPenStyle = PEN_STYLE_SOLID; pZoomView->EnableCallouts = TRUE; pZoomView->CalloutColor = RGB(255,0,0); pZoomView->CalloutPenStyle = PEN_STYLE_DASH; pZoomView->AnnContainer = theApp.m_pRasterAnn->GetAnnContainer(); theApp.m_pRasterAnn->PutAnnEnableZoomView(TRUE); if(m_RasterView.GetRgnMarkingMode() == RGNMARK_RECT) m_RasterView.CreateZoomView(pZoomView); if(m_RasterView.GetRaster().GetHasRgn()) m_RasterView.GetRaster().FreeRgn(); pZoomView->Release(); pZoomView = NULL; return; } } void CZoomViewView::OnMouseDownLeadRasterView(short Button, short Shift, float x, float y) { POINT pt; pt.x = (long)(x - m_RasterView.GetDstLeft()); pt.y = (long)(y - m_RasterView.GetDstTop()); pt.x = (long)(pt.x / (m_RasterView.GetPaintZoomFactor() / 100.0) * FACTOR); pt.y = (long)(pt.y / (m_RasterView.GetPaintZoomFactor() / 100.0) * FACTOR); if(PointInZoomView(&pt) >= 0) { m_RasterView.SetRgnMarkingMode (RGNMARK_NONE); } else { m_RasterView.SetRgnMarkingMode (RGNMARK_RECT); } } int CZoomViewView::PointInZoomView(POINT *pt) { int nZoomViewIndex = -1; if(m_RasterView.GetHasZoomView()) { ILEADRasterZoomView *pZoomView; RECT rcSrc,rcDst; pZoomView = NULL; HRESULT hr = CoCreateInstance( CLSID_LEADRasterZoomView, NULL, CLSCTX_ALL, IID_ILEADRasterZoomView, (void**)&pZoomView ); for(int i = 0; i < m_RasterView.GetZoomViewsCount(); ++i) { pZoomView->Index = m_RasterView.GetZoomViewsCount()-i-1; m_RasterView.GetZoomView(pZoomView); SetRect(&rcSrc, pZoomView->SrcLeft, pZoomView->SrcTop, pZoomView->SrcLeft + pZoomView->SrcWidth, pZoomView->SrcTop + pZoomView->SrcHeight ); if(PtInRect(&rcSrc, *pt)) { nZoomViewIndex = m_RasterView.GetZoomViewsCount()-i-1; break; } SetRect(&rcDst, pZoomView->DstLeft, pZoomView->DstTop, pZoomView->DstLeft + pZoomView->DstWidth, pZoomView->DstTop + pZoomView->DstHeight ); if(PtInRect(&rcDst, *pt)) { nZoomViewIndex = m_RasterView.GetZoomViewsCount() - i -1; break; } } pZoomView->Release(); } return nZoomViewIndex; } void CZoomViewView::OnZoomViewOptions() { ILEADRasterZoomView * pZoomView; HRESULT hr = CoCreateInstance( CLSID_LEADRasterZoomView, NULL, CLSCTX_ALL, IID_ILEADRasterZoomView, (void**)&pZoomView ); if (SUCCEEDED(hr)) { pZoomView->Index = m_nZoomViewIndex; m_RasterView.GetZoomView(pZoomView); CZoomViewOptionsDlg ZoomViewDlg(pZoomView); if(ZoomViewDlg.DoModal() == IDOK) { m_RasterView.UpdateZoomView(pZoomView); } } } BOOL CZoomViewView::OnEraseBkgnd(CDC* pDC) { return FALSE; } void CZoomViewView::OnZoomViewDelete() { m_RasterView.DestroyZoomView(m_nZoomViewIndex); m_nZoomViewIndex = -1; } void CZoomViewView::OnViewNormal() { m_RasterView.SetPaintSizeMode(PAINTSIZEMODE_NORMAL); } void CZoomViewView::OnUpdateViewNormal(CCmdUI* pCmdUI) { pCmdUI->Enable(m_RasterView.GetRaster().GetBitmap() != 0); pCmdUI->SetCheck(m_RasterView.GetPaintSizeMode() == PAINTSIZEMODE_NORMAL); } void CZoomViewView::OnViewFitimagetowindow() { m_RasterView.SetPaintSizeMode(PAINTSIZEMODE_FIT); } void CZoomViewView::OnUpdateViewFitimagetowindow(CCmdUI* pCmdUI) { pCmdUI->Enable(m_RasterView.GetRaster().GetBitmap() != 0); pCmdUI->SetCheck(m_RasterView.GetPaintSizeMode() == PAINTSIZEMODE_FIT); } void CZoomViewView::OnViewZoom() { m_RasterView.SetPaintSizeMode(PAINTSIZEMODE_ZOOM); CRangeDlg dlg; dlg.m_strTitle = _T("Zoom"); dlg.m_strLabel = _T("&Amount"); dlg.m_nValue = (int)m_RasterView.GetPaintZoomFactor(); dlg.m_nMin = 1; dlg.m_nMax = 800; dlg.m_nPage = 100; if(dlg.DoModal() == IDOK) { m_RasterView.SetPaintZoomFactor((float)dlg.m_nValue); } } void CZoomViewView::OnUpdateViewZoom(CCmdUI* pCmdUI) { pCmdUI->Enable(m_RasterView.GetRaster().GetBitmap() != 0); pCmdUI->SetCheck(m_RasterView.GetPaintSizeMode() == PAINTSIZEMODE_ZOOM); } void CZoomViewView::OnViewHiliteimage() { m_RasterView.SetEnableHiliteZoomView(!m_RasterView.GetEnableHiliteZoomView()); m_RasterView.ForceRepaint(); } void CZoomViewView::OnUpdateViewHiliteimage(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_RasterView.GetEnableHiliteZoomView()); } void CZoomViewView::OnAbout() { ((CZoomViewApp*)AfxGetApp())->OnAppAbout(); } void CZoomViewView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint) { m_RasterView.SetBitonalScaling(theApp.m_nBitonalScaling); } void CZoomViewView::OnKeyPressLeadRasterView(short KeyAscii) { } void CZoomViewView::OnKeyDownLeadRasterView(short KeyCode, short Shift) { if(KeyCode == VK_DELETE) { m_RasterView.DestroyZoomView(m_nZoomViewIndex); m_nZoomViewIndex = -1; } } void CZoomViewView::OnDestroy() { if(m_RasterView.GetHasZoomView()) { int uCount = m_RasterView.GetZoomViewsCount(); for(int i = 0; i < uCount; ++i) { m_RasterView.DestroyZoomView(uCount - i - 1); } } CFormView::OnDestroy(); }