//PaintVw.cpp:implementationoftheCPaintViewclass // #include "stdafx.h" #include "Paint.h" #include "PaintDoc.h" #include "PaintVw.h" #include "MainFrm.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif extern CPaintApp theApp; enum { TOOL_NONE, TOOL_BRUSH, TOOL_SHAPE_LINE, TOOL_SHAPE_RECT, TOOL_SHAPE_ROUNDRECT, TOOL_SHAPE_ELLIPSE, TOOL_SHAPE_POLYGON, TOOL_REGION_RECT, TOOL_REGION_ROUNDRECT, TOOL_REGION_ELLIPSE, TOOL_REGION_POLYGON, TOOL_REGION_SURFACE, TOOL_REGION_BORDER, TOOL_REGION_COLOR, TOOL_FILL_SURFACE, TOOL_FILL_BORDER, TOOL_FILL_COLORREPLACE, TOOL_TEXT }; ///////////////////////////////////////////////////////////////////////////// // CPaintView IMPLEMENT_DYNCREATE(CPaintView, CFormView) BEGIN_MESSAGE_MAP(CPaintView, CFormView) //{{AFX_MSG_MAP(CPaintView) ON_MESSAGE(WM_DOREALIZE, OnDoRealize) ON_WM_SIZE() ON_COMMAND(ID_TOOL_BRUSH, OnToolBrush) ON_UPDATE_COMMAND_UI(ID_TOOL_BRUSH, OnUpdateToolBrush) ON_COMMAND(ID_TOOL_SHAPE_LINE, OnToolShapeLine) ON_UPDATE_COMMAND_UI(ID_TOOL_SHAPE_LINE, OnUpdateToolShapeLine) ON_COMMAND(ID_TOOL_SHAPE_POLYGON, OnToolShapePolygon) ON_UPDATE_COMMAND_UI(ID_TOOL_SHAPE_POLYGON, OnUpdateToolShapePolygon) ON_COMMAND(ID_TOOL_SHAPE_RECTANGLE, OnToolShapeRectangle) ON_UPDATE_COMMAND_UI(ID_TOOL_SHAPE_RECTANGLE, OnUpdateToolShapeRectangle) ON_COMMAND(ID_TOOL_SHAPE_ROUNDRECTANGLE, OnToolShapeRoundrectangle) ON_UPDATE_COMMAND_UI(ID_TOOL_SHAPE_ROUNDRECTANGLE, OnUpdateToolShapeRoundrectangle) ON_COMMAND(ID_TOOL_SHAPE_ELLIPSE, OnToolShapeEllipse) ON_UPDATE_COMMAND_UI(ID_TOOL_SHAPE_ELLIPSE, OnUpdateToolShapeEllipse) ON_COMMAND(ID_TOOL_REGION_BORDER, OnToolRegionBorder) ON_UPDATE_COMMAND_UI(ID_TOOL_REGION_BORDER, OnUpdateToolRegionBorder) ON_COMMAND(ID_TOOL_REGION_CANCEL, OnToolRegionCancel) ON_UPDATE_COMMAND_UI(ID_TOOL_REGION_CANCEL, OnUpdateToolRegionCancel) ON_COMMAND(ID_TOOL_REGION_COLOR, OnToolRegionColor) ON_UPDATE_COMMAND_UI(ID_TOOL_REGION_COLOR, OnUpdateToolRegionColor) ON_COMMAND(ID_TOOL_REGION_ELLIPSE, OnToolRegionEllipse) ON_UPDATE_COMMAND_UI(ID_TOOL_REGION_ELLIPSE, OnUpdateToolRegionEllipse) ON_COMMAND(ID_TOOL_REGION_POLYGON, OnToolRegionPolygon) ON_UPDATE_COMMAND_UI(ID_TOOL_REGION_POLYGON, OnUpdateToolRegionPolygon) ON_COMMAND(ID_TOOL_REGION_RECTANGLE, OnToolRegionRectangle) ON_UPDATE_COMMAND_UI(ID_TOOL_REGION_RECTANGLE, OnUpdateToolRegionRectangle) ON_COMMAND(ID_TOOL_REGION_ROUNDRECTANGLE, OnToolRegionRoundrectangle) ON_UPDATE_COMMAND_UI(ID_TOOL_REGION_ROUNDRECTANGLE, OnUpdateToolRegionRoundrectangle) ON_COMMAND(ID_TOOL_REGION_SURFACE, OnToolRegionSurface) ON_UPDATE_COMMAND_UI(ID_TOOL_REGION_SURFACE, OnUpdateToolRegionSurface) ON_COMMAND(ID_TOOL_FILL_BORDER, OnToolFillBorder) ON_UPDATE_COMMAND_UI(ID_TOOL_FILL_BORDER, OnUpdateToolFillBorder) ON_COMMAND(ID_TOOL_FILL_COLORREPLACE, OnToolFillColorreplace) ON_UPDATE_COMMAND_UI(ID_TOOL_FILL_COLORREPLACE, OnUpdateToolFillColorreplace) ON_COMMAND(ID_TOOL_FILL_SURFACE, OnToolFillSurface) ON_UPDATE_COMMAND_UI(ID_TOOL_FILL_SURFACE, OnUpdateToolFillSurface) ON_COMMAND(ID_TOOL_TEXT, OnToolText) ON_UPDATE_COMMAND_UI(ID_TOOL_TEXT, OnUpdateToolText) ON_COMMAND(ID_OPTIONS_BRUSH, OnOptionsBrush) ON_COMMAND(ID_OPTIONS_SHAPE, OnOptionsShape) ON_COMMAND(ID_OPTIONS_REGION, OnOptionsRegion) ON_COMMAND(ID_OPTIONS_FILL, OnOptionsFill) ON_COMMAND(ID_OPTIONS_TEXT, OnOptionsText) ON_COMMAND(ID_EDIT_COPY, OnEditCopy) ON_COMMAND(ID_FILE_SAVE_AS, OnFileSaveAs) ON_COMMAND(ID_VIEW_ZOOMIN, OnViewZoomIn) ON_COMMAND(ID_VIEW_ZOOMOUT, OnViewZoomOut) //}}AFX_MSG_MAP // Standard printing commands ON_COMMAND(ID_FILE_PRINT, CFormView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_DIRECT, CFormView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW, CFormView::OnFilePrintPreview) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CPaintView construction/destruction CPaintView::CPaintView() : CFormView(CPaintView::IDD) { //{{AFX_DATA_INIT(CPaintView) //}}AFX_DATA_INIT // TODO: add construction code here m_bDrawing = FALSE; m_nToolType = TOOL_NONE; m_nPointCount=0; m_bFirstDraw=FALSE; m_nStartY= (float)0.0; m_nStartX= (float)0.0; m_nEndX=(float)0.0; m_nEndY=(float)0.0; m_FirstPointX = (float)0.0; m_FirstPointY = (float)0.0; m_bButtonDown = FALSE; m_crBorder = RGB(0,0,0); m_pPalette = NULL; } CPaintView::~CPaintView() { if(m_pPalette) delete m_pPalette; } void CPaintView::DoDataExchange(CDataExchange* pDX) { CFormView::DoDataExchange(pDX); //{{AFX_DATA_MAP(CPaintView) DDX_Control(pDX, IDC_LEADCTRL1, m_Lead); DDX_Control(pDX, IDC_LEADPAINTCTRL1, m_LeadPaint); DDX_Control(pDX, IDC_LEADCTRL2, m_LeadPaper); DDX_Control(pDX, IDC_LEADCTRL3, m_LeadTemp); DDX_Control(pDX, IDC_LEADCTRL4, m_LeadBackground); DDX_Control(pDX, IDC_LEADCTRL5, m_LeadTouch); DDX_Control(pDX, IDC_LEADCTRL6, m_LeadBorder); DDX_Control(pDX, IDC_LEADCTRL7, m_Lead7); //}}AFX_DATA_MAP } BOOL CPaintView::PreCreateWindow(CREATESTRUCT& cs) { // TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs return CFormView::PreCreateWindow(cs); } ///////////////////////////////////////////////////////////////////////////// // CPaintView printing BOOL CPaintView::OnPreparePrinting(CPrintInfo* pInfo) { // default preparation return DoPreparePrinting(pInfo); } void CPaintView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) { // TODO: add extra initialization before printing } void CPaintView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) { // TODO: add cleanup after printing } void CPaintView::OnPrint(CDC* pDC, CPrintInfo*) { CRect rcClip; CSize winext; CSize viewext; CSize paintext; if(pDC->IsPrinting()) { pDC->SaveDC(); ::GetWindowExtEx(pDC->m_hDC, &winext); ::GetViewportExtEx(pDC->m_hDC, &viewext); paintext.cx = MulDiv((int) m_Lead.GetBitmapWidth(), viewext.cx, winext.cx); paintext.cy = MulDiv((int) m_Lead.GetBitmapHeight(), viewext.cy, winext.cy); ::SetMapMode(pDC->m_hDC, MM_TEXT); // Must use 1,1, in V13 b/c of center option m_Lead.Render((OLE_HANDLE) pDC->m_hDC, (float) 1, (float) 1, (float) paintext.cx, (float) paintext.cy); pDC->RestoreDC(-1); } } ///////////////////////////////////////////////////////////////////////////// // CPaintView diagnostics #ifdef _DEBUG void CPaintView::AssertValid() const { CFormView::AssertValid(); } void CPaintView::Dump(CDumpContext& dc) const { CFormView::Dump(dc); } CPaintDoc* CPaintView::GetDocument() // non-debug version is inline { ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CPaintDoc))); return (CPaintDoc*)m_pDocument; } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CPaintView message handlers void CPaintView::OnInitialUpdate() { CFormView::OnInitialUpdate(); CPaintDoc *pDoc = (CPaintDoc *)GetDocument(); UNLOCKSUPPORT(m_Lead); pDoc->m_LeadDoc.SetRefBitmap(TRUE); m_Lead.SetBitmap(pDoc->m_LeadDoc.GetBitmap()); int xExt = (int)pDoc->m_LeadDoc.GetBitmapWidth(), yExt = (int)pDoc->m_LeadDoc.GetBitmapHeight(); // 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)); pDoc->m_LeadDoc.SetAutoPan(TRUE); pDoc->m_LeadDoc.SetBackErase(FALSE); UpdatePaintMetrics(); m_Lead.SetRgnFrameType(RGNFRAME_STATIC); CBitmap BitmapTemp; BitmapTemp.LoadBitmap(IDB_BITMAP_PAPER); //m_LeadPaper.Load.SetDDB(m_hDC, HBITMAP(BitmapTemp), ); LoadResourceBitmap(IDB_BITMAP_PAPER); m_LeadPaper.SetBitmap( m_LeadTemp.GetBitmap()); LoadResourceBitmap(IDB_BITMAP_BACKGROUND); m_LeadBackground.SetBitmap( m_LeadTemp.GetBitmap()); LoadResourceBitmap(IDB_BITMAP_TOUCH); m_LeadTouch.SetBitmap( m_LeadTemp.GetBitmap()); LoadResourceBitmap(IDB_BITMAP_BORDER); m_LeadBorder.SetBitmap( m_LeadTemp.GetBitmap()); //Set default properties for paint dialogs CreateDefaultObjects(); OnToolBrush(); } void CPaintView::OnSize(UINT nType, int cx, int cy) { CFormView::OnSize(nType, cx, cy); if( IsWindow(m_Lead.m_hWnd) ) { m_Lead.MoveWindow(0, 0, cx, cy); m_Lead.SetBackErase(FALSE); if(m_Lead.GetBitmap()) { UpdatePaintMetrics(); UpdateXForm(); } } } BEGIN_EVENTSINK_MAP(CPaintView, CFormView) //{{AFX_EVENTSINK_MAP(CPaintView) ON_EVENT(CPaintView, IDC_LEADCTRL1, -605 /* MouseDown */, OnMouseDownLeadctrl1, VTS_I2 VTS_I2 VTS_I4 VTS_I4) ON_EVENT(CPaintView, IDC_LEADCTRL1, -606 /* MouseMove */, OnMouseMoveLeadctrl1, VTS_I2 VTS_I2 VTS_I4 VTS_I4) ON_EVENT(CPaintView, IDC_LEADCTRL1, -607 /* MouseUp */, OnMouseUpLeadctrl1, VTS_I2 VTS_I2 VTS_I4 VTS_I4) ON_EVENT(CPaintView, IDC_LEADCTRL1, -601 /* DblClick */, OnDblClickLeadctrl1, VTS_NONE) ON_EVENT(CPaintView, IDC_LEADCTRL1, 3 /* Scroll */, OnScrollLeadctrl1, VTS_NONE) //}}AFX_EVENTSINK_MAP END_EVENTSINK_MAP() void CPaintView::OnMouseDownLeadctrl1(short Button, short Shift, long x, long y) { long hRgn1; if (Button == 1) { m_FirstPointX = (float)x; m_FirstPointY = (float)y; m_bMovingFloater=FALSE; m_Lead.ClientToBitmap((float)x,(float)y); switch (m_nToolType) { case TOOL_REGION_RECT: case TOOL_REGION_ROUNDRECT: case TOOL_REGION_ELLIPSE: case TOOL_REGION_POLYGON: case TOOL_REGION_SURFACE: case TOOL_REGION_BORDER: case TOOL_REGION_COLOR: if(m_Lead.GetHasRgn() && m_Lead.IsPtInRgn(m_Lead.GetConvertX(), m_Lead.GetConvertY())) { m_Lead.SetRgnFrameType(RGNFRAME_NONE); m_nStartX = (float)x; m_nStartY = (float)y; // we put the floater into the bitmap only when we select another region // if we have a floater at this point, it's because we clicked INSIDE the floater m_Lead.SetFloaterVisible(FALSE); m_Lead.SetFloater(m_Lead.GetBitmap()); // the floater coordinates are relative to the window, while the // ocx region coordinates are relative to the bitmap. Adding m_Lead.DstLeft // converts m_Lead.RgnLeft to window coordinates m_rcFloater.left = (int) ((m_Lead.GetRgnLeft() * m_Lead.GetDstWidth() + m_Lead.GetSrcWidth() - 1) / m_Lead.GetSrcWidth() + m_Lead.GetDstLeft()); m_rcFloater.top = (int) (m_Lead.GetRgnTop() * m_Lead.GetDstHeight() / m_Lead.GetSrcHeight() + m_Lead.GetDstTop()); m_rcFloater.right = (int) (((m_Lead.GetFloaterWidth() + m_Lead.GetRgnLeft()) * m_Lead.GetDstWidth() + m_Lead.GetSrcWidth() - 1) / m_Lead.GetSrcWidth() + m_Lead.GetDstLeft()); m_rcFloater.bottom = (int) ((m_Lead.GetFloaterHeight() + m_Lead.GetRgnTop()) * m_Lead.GetDstHeight() / m_Lead.GetSrcHeight() + m_Lead.GetDstTop()); m_Lead.SetFloaterDstRect((float) m_rcFloater.left, (float) m_rcFloater.top, (float) m_rcFloater.Width(), (float) m_rcFloater.Height()); if(m_Lead7.GetBitmap() != NULL ) { m_Lead.Combine(m_Lead.GetRgnLeft(), m_Lead.GetRgnTop(), m_Lead.GetFloaterWidth(), m_Lead.GetFloaterHeight(), m_Lead7.GetBitmap(), 0.0f, 0.0f, L_SRC_COPY ); // RepaintRect uses window coordinates like the floater bitmap m_Lead.RepaintRect(m_Lead.GetFloaterDstLeft(), m_Lead.GetFloaterDstTop(), m_Lead.GetFloaterDstWidth(), m_Lead.GetFloaterDstHeight(), FALSE); } m_Lead.SetFloaterVisible(TRUE); m_bMovingFloater = TRUE; return; } break; } m_Lead7.SetBitmap(0); m_bButtonDown = TRUE; m_Lead.SetEnableKeyboard(FALSE); m_Lead.SetEnableScroll(FALSE); switch (m_nToolType) { case TOOL_REGION_RECT: case TOOL_REGION_ROUNDRECT: case TOOL_REGION_ELLIPSE: case TOOL_REGION_POLYGON: if (m_bDrawing == FALSE) { if (m_Lead.GetHasRgn() == TRUE) { m_Lead.FreeRgn(); m_LeadPaint.SetClipRgn(NULL); } } break; case TOOL_REGION_SURFACE: case TOOL_REGION_BORDER: if (m_Lead.GetHasRgn() == TRUE) { m_Lead.FreeRgn(); m_LeadPaint.SetClipRgn(NULL); } break; } switch (m_nToolType) { case TOOL_BRUSH: { m_bDrawing = TRUE; m_LeadPaint.GetBrush().MoveTo(x, y); } break; case TOOL_SHAPE_LINE: case TOOL_SHAPE_RECT: case TOOL_SHAPE_ROUNDRECT: case TOOL_SHAPE_ELLIPSE: case TOOL_REGION_RECT: case TOOL_REGION_ROUNDRECT: case TOOL_REGION_ELLIPSE: case TOOL_TEXT: { m_nStartX = (float)x; m_nStartY = (float)y; m_bDrawing = TRUE; m_bFirstDraw = TRUE; m_Lead.SetDrawMode(DRAWMODE_INVERT); } break; case TOOL_SHAPE_POLYGON: case TOOL_REGION_POLYGON: //MouseDown { m_nStartX = (float)x; m_nStartY = (float)y; m_bDrawing = TRUE; m_bFirstDraw = TRUE; m_Lead.SetDrawMode(DRAWMODE_INVERT); if(m_nPointCount == 0) { m_nPointCount++; m_LeadPaint.SetPolygonX(m_nPointCount - 1, x); m_LeadPaint.SetPolygonY(m_nPointCount - 1, y); } } break; case TOOL_REGION_SURFACE: { BeginWaitCursor(); m_LeadPaint.GetRegion().Surface(x, y); hRgn1 = m_LeadPaint.GetRegion().GetHRgn(); m_LeadPaint.SetClipRgn(hRgn1); m_Lead.SetRgnHandle(hRgn1, (float)0.0, (float)0.0, L_RGN_SET); m_Lead.SetRgnFrameType(RGNFRAME_STATIC); EndWaitCursor(); } break; case TOOL_REGION_BORDER: { if (Button == RIGHT_BUTTON) { m_LeadPaint.PickColor(x, y); m_crBorder = m_LeadPaint.GetBitmapColor(); } else { BeginWaitCursor(); m_LeadPaint.GetRegion().Border(x, y, m_crBorder); hRgn1 = m_LeadPaint.GetRegion().GetHRgn(); m_LeadPaint.SetClipRgn(hRgn1); m_Lead.SetRgnHandle(hRgn1, (float)0.0, (float)0.0, L_RGN_SET); m_Lead.SetRgnFrameType(RGNFRAME_STATIC); EndWaitCursor(); } } break; case TOOL_REGION_COLOR: { m_LeadPaint.PickColor(x, y); BeginWaitCursor(); m_LeadPaint.GetRegion().Color(m_LeadPaint.GetBitmapColor()); hRgn1 = m_LeadPaint.GetRegion().GetHRgn(); m_LeadPaint.SetClipRgn(hRgn1); m_Lead.SetRgnHandle(hRgn1, (float)0.0, (float)0.0, L_RGN_SET); m_Lead.SetRgnFrameType(RGNFRAME_STATIC); EndWaitCursor(); } break; case TOOL_FILL_SURFACE: BeginWaitCursor(); m_LeadPaint.GetFill().Surface(x, y); EndWaitCursor(); break; case TOOL_FILL_BORDER: { if (Button == RIGHT_BUTTON) { m_LeadPaint.PickColor(x, y); m_crBorder = m_LeadPaint.GetBitmapColor(); } else { BeginWaitCursor(); m_LeadPaint.GetFill().Border(x, y, m_crBorder); EndWaitCursor(); } } break; case TOOL_FILL_COLORREPLACE: { m_LeadPaint.PickColor(x, y); BeginWaitCursor(); m_LeadPaint.GetFill().ColorReplace(m_LeadPaint.GetBitmapColor()); EndWaitCursor(); } break; } } if (m_bDrawing) { UpdateStatusBar(); } } void CPaintView::OnMouseMoveLeadctrl1(short Button, short Shift, long x, long y) { float BitmapX; float BitmapY; long Red, Green, Blue; COLORREF color; int bInImage; BitmapX = (x - m_Lead.GetDstLeft()) * (100 / m_Lead.GetPaintZoomFactor()); BitmapY = (y - m_Lead.GetDstTop()) * (100 / m_Lead.GetPaintZoomFactor()); if( (Button == 1) && m_bMovingFloater ) { m_Lead.SetFloaterDstRect((float) (m_rcFloater.left + x - m_nStartX), (float) (m_rcFloater.top + y - m_nStartY), m_Lead.GetFloaterDstWidth(), m_Lead.GetFloaterDstHeight()); return; } bInImage = TRUE;//assume in image // if ((BitmapX < m_Lead.GetBitmapWidth()) && (BitmapY < m_Lead.GetBitmapHeight())) // m_Lead.ClientToBitmap((float)x,(float)y); // if((m_Lead.GetConvertX() < m_Lead.GetBitmapWidth()) && (m_Lead.GetConvertY() < m_Lead.GetBitmapHeight())) // { // CString strStatus; // strStatus.Format("Row[%d] Col[%d]", (long)BitmapY, (long)BitmapX); // // UpdateStatusBar(1, (char*)(LPCTSTR)strStatus); // } // else // { // bInImage = FALSE; // UpdateStatusBar(1); // } if (m_bDrawing == FALSE) { if ((m_Lead.GetBitmap()!= 0) && (bInImage == TRUE)) { m_LeadPaint.PickColor(x, y); color = m_LeadPaint.GetBitmapColor(); Blue = GetBValue(color); Green = GetGValue(color); Red = GetRValue(color); CString strStatus; strStatus.Format("R(%d) G(%d) B(%d)", GetRValue(color), GetGValue(color), GetBValue(color) ); UpdateStatusBar(2, (char*)(LPCTSTR)strStatus); } else { UpdateStatusBar(2); } } switch(m_nToolType) { case TOOL_BRUSH: { if (m_bDrawing) { m_LeadPaint.GetBrush().LineTo(x, y); } } break; case TOOL_SHAPE_LINE: { if (m_bDrawing) { if (!m_bFirstDraw) m_Lead.DrawLine(m_nStartX, m_nStartY, m_nEndX, m_nEndY); m_nEndX = (float)x; m_nEndY = (float)y; m_Lead.DrawLine(m_nStartX, m_nStartY, m_nEndX, m_nEndY); m_bFirstDraw = FALSE; } } break; case TOOL_SHAPE_RECT: case TOOL_REGION_RECT: { if (m_bDrawing) { if (!m_bFirstDraw) m_Lead.DrawRectangle(m_nStartX, m_nStartY, m_nEndX - m_nStartX, m_nEndY - m_nStartY); m_nEndX = (float)x; m_nEndY = (float)y; m_Lead.DrawRectangle(m_nStartX, m_nStartY, m_nEndX - m_nStartX, m_nEndY - m_nStartY); m_bFirstDraw = FALSE; } } break; case TOOL_SHAPE_ROUNDRECT: case TOOL_REGION_ROUNDRECT: case TOOL_TEXT: { if (m_bDrawing) { if (!m_bFirstDraw) m_Lead.DrawRectangle(m_nStartX, m_nStartY, m_nEndX - m_nStartX, m_nEndY - m_nStartY); m_nEndX = (float)x; m_nEndY = (float)y; m_Lead.DrawRectangle(m_nStartX, m_nStartY, m_nEndX - m_nStartX, m_nEndY - m_nStartY); m_bFirstDraw = FALSE; } } break; case TOOL_SHAPE_ELLIPSE: case TOOL_REGION_ELLIPSE: { if (m_bDrawing) { if (!m_bFirstDraw) m_Lead.DrawEllipse(m_nStartX, m_nStartY, m_nEndX - m_nStartX, m_nEndY - m_nStartY); m_nEndX = (float)x; m_nEndY = (float)y; m_Lead.DrawEllipse(m_nStartX, m_nStartY, m_nEndX - m_nStartX, m_nEndY - m_nStartY); m_bFirstDraw = FALSE; } } break; case TOOL_SHAPE_POLYGON: //MouseMove case TOOL_REGION_POLYGON: { if(m_bDrawing) { if(m_bFirstDraw) { m_nEndX = (float)x; m_nEndY = (float)y; m_Lead.DrawLine(m_nStartX, m_nStartY, m_nEndX, m_nEndY); m_bFirstDraw = FALSE; } else { m_Lead.DrawLine(m_nStartX, m_nStartY, m_nEndX, m_nEndY); m_nEndX = (float)x; m_nEndY = (float)y; m_Lead.DrawLine(m_nStartX, m_nStartY, m_nEndX, m_nEndY); } } } break; } } void CPaintView::OnMouseUpLeadctrl1(short Button, short Shift, long x, long y) { long hRgn1; long dx, dy; float x0, y0; float OldX; float OldY; m_bButtonDown = FALSE; if(m_bMovingFloater) { m_bMovingFloater = FALSE; m_Lead.SetRgnFrameType(RGNFRAME_NONE); hRgn1 = m_Lead.GetFloaterHandle(); // Calculate the region offset if(x >= m_nStartX) dx = (long)(x - m_nStartX) * (long) m_Lead.GetSrcWidth() / (long) m_Lead.GetDstWidth(); else dx = (long)((x - m_nStartX) * (long) m_Lead.GetSrcWidth() - (long) m_Lead.GetDstWidth() + 1) / (long) m_Lead.GetDstWidth(); if(y >= m_nStartY) dy = (long)(y - m_nStartY) * (long) m_Lead.GetSrcHeight() / (long) m_Lead.GetDstHeight(); else dy = (long)((y - m_nStartY) * (long) m_Lead.GetSrcHeight() - (long) m_Lead.GetDstHeight() + 1) / (long) m_Lead.GetDstHeight(); m_Lead.OffsetRgn((float) dx, (float) dy); m_Lead.DeleteRgnHandle (hRgn1); // delete the region object hRgn1 = m_Lead.GetRgnHandle(); m_LeadPaint.SetClipRgn(hRgn1); // save the background in case we want to move the floater again m_Lead7.CreateBitmap(m_Lead.GetFloaterWidth(), m_Lead.GetFloaterHeight(), m_Lead.GetBitmapBits() ); if((m_Lead.GetIsGrayscale() != GRAY_NO) && (m_Lead.GetBitmapBits()>8)) m_Lead7.Grayscale(m_Lead.GetBitmapBits()); m_Lead7.Combine( 0.0f, 0.0f, m_Lead.GetFloaterWidth(), m_Lead.GetFloaterHeight(), m_Lead.GetBitmap(), m_Lead.GetRgnLeft(), m_Lead.GetRgnTop(), L_SRC_COPY); // now blend the floater into the bitmap and make it dissapear // if we leave it, when we scroll, the floater won't move with the bitmap // that's because the floater is independent of the bitmap m_Lead.Combine( m_Lead.GetRgnLeft(), m_Lead.GetRgnTop(), m_Lead.GetFloaterWidth(), m_Lead.GetFloaterHeight(), m_Lead.GetFloater(), 0.0f, 0.0f, L_SRC_COPY); // RepaintRect uses window coordinates like the floater bitmap float x,y,w,h; x=m_Lead.GetFloaterDstLeft(); y=m_Lead.GetFloaterDstTop(); w=m_Lead.GetFloaterDstWidth(); h=m_Lead.GetFloaterDstHeight(); // free the floater m_Lead.SetFloater(NULL); m_Lead.RepaintRect(x,y,w,h,TRUE); // draw the frame m_Lead.SetRgnFrameType(RGNFRAME_STATIC); m_Lead.DeleteRgnHandle ((long)hRgn1); // delete the region object long nArea = m_Lead.GetRgnArea(); if(!nArea) OnToolRegionCancel(); return; } switch(m_nToolType) { case TOOL_BRUSH: { if (m_bDrawing) { m_LeadPaint.GetBrush().LineTo(x, y); m_bDrawing = FALSE; } } break; case TOOL_SHAPE_LINE: { if (m_bDrawing ) { if (m_bFirstDraw) { m_nEndX = (float)x; m_nEndY = (float)y; m_Lead.DrawLine(m_nStartX, m_nStartY, m_nEndX, m_nEndY); m_bFirstDraw = FALSE; } else { m_nEndX = (float)x; m_nEndY = (float)y; m_Lead.DrawLine(m_nStartX, m_nStartY, m_nEndX, m_nEndY); } m_LeadPaint.GetShape().DrawLine((long)m_nStartX, (long)m_nStartY, (long)m_nEndX, (long)m_nEndY); m_bDrawing = FALSE; } } break; case TOOL_SHAPE_RECT: case TOOL_REGION_RECT: case TOOL_TEXT: if (m_FirstPointX == x && m_FirstPointY == y) m_bDrawing = FALSE; if (m_bDrawing) { if (m_bFirstDraw) { m_nEndX = (float)x; m_nEndY = (float)y; m_Lead.DrawRectangle(m_nStartX, m_nStartY, m_nEndX - m_nStartX, m_nEndY - m_nStartY); m_bFirstDraw = FALSE; } else { m_Lead.DrawRectangle(m_nStartX, m_nStartY, m_nEndX - m_nStartX, m_nEndY - m_nStartY); m_nEndX = (float)x; m_nEndY = (float)y; } if (m_nToolType == TOOL_SHAPE_RECT) { m_LeadPaint.GetShape().DrawRect( (long)m_nStartX, (long)m_nStartY, (long)(m_nEndX - m_nStartX), (long)(m_nEndY - m_nStartY) ); } else if (m_nToolType == TOOL_REGION_RECT) { m_LeadPaint.GetRegion().Rect( (long)m_nStartX, (long)m_nStartY, (long)(m_nEndX - m_nStartX), (long)(m_nEndY - m_nStartY) ); hRgn1 = m_LeadPaint.GetRegion().GetHRgn(); m_LeadPaint.SetClipRgn(hRgn1); m_Lead.SetRgnHandle((long)hRgn1, (float)0, (float)0, L_RGN_SET); m_Lead.SetRgnFrameType(RGNFRAME_STATIC); // if (m_nStartX > m_Lead.GetBitmapWidth() || m_nStartY > m_Lead.GetBitmapHeight()) m_Lead.ClientToBitmap(m_nStartX, m_nStartY); if(m_Lead.GetConvertX() > m_Lead.GetBitmapWidth() || m_Lead.GetConvertY() > m_Lead.GetBitmapHeight()) { m_Lead.FreeRgn(); m_LeadPaint.SetClipRgn(NULL); } UpdateStatusBar(); } else { x0 = (m_nEndX - m_nStartX) / 2; y0 = (m_nEndY - m_nStartY) / 2; UpdateStatusBar(); m_LeadPaint.GetText().Apply( (long)m_nStartX, (long)m_nStartY, (long)(m_nEndX - m_nStartX), (long)(m_nEndY - m_nStartY) ); } m_bDrawing = FALSE; } break; case TOOL_SHAPE_ROUNDRECT: case TOOL_REGION_ROUNDRECT: { if (m_FirstPointX == x && m_FirstPointY == y) m_bDrawing = FALSE; if (m_bDrawing) { if (m_bFirstDraw) { m_nEndX = (float)x; m_nEndY = (float)y; m_Lead.DrawRectangle(m_nStartX, m_nStartY, m_nEndX - m_nStartX, m_nEndY - m_nStartY); m_bFirstDraw = FALSE; } else { m_Lead.DrawRectangle(m_nStartX, m_nStartY, m_nEndX - m_nStartX, m_nEndY - m_nStartY); } if (m_nToolType == TOOL_SHAPE_ROUNDRECT) { m_LeadPaint.GetShape().DrawRoundRect( (long)m_nStartX, (long)m_nStartY, (long)(m_nEndX - m_nStartX), (long)(m_nEndY - m_nStartY) ); } else { //On Error Resume Next m_LeadPaint.GetRegion().RoundRect( (long)m_nStartX, (long)m_nStartY, (long)(m_nEndX - m_nStartX), (long)(m_nEndY - m_nStartY) ); hRgn1 = m_LeadPaint.GetRegion().GetHRgn(); m_LeadPaint.SetClipRgn(hRgn1); m_Lead.SetRgnHandle((long)hRgn1, (float)0, (float)0, L_RGN_SET); m_Lead.SetRgnFrameType(RGNFRAME_STATIC); // if (m_nStartX > m_Lead.GetBitmapWidth() || m_nStartY > m_Lead.GetBitmapHeight()) m_Lead.ClientToBitmap(m_nStartX, m_nStartY); if(m_Lead.GetConvertX() > m_Lead.GetBitmapWidth() || m_Lead.GetConvertY() > m_Lead.GetBitmapHeight()) { m_Lead.FreeRgn(); m_LeadPaint.SetClipRgn(NULL); } UpdateStatusBar(); } m_bDrawing = FALSE; } } break; case TOOL_SHAPE_ELLIPSE: case TOOL_REGION_ELLIPSE: if (m_FirstPointX == x && m_FirstPointY == y) m_bDrawing = FALSE; if (m_bDrawing) { if (m_bFirstDraw) { m_nEndX = (float)x; m_nEndY = (float)y; m_Lead.DrawEllipse(m_nStartX, m_nStartY, m_nEndX - m_nStartX, m_nEndY - m_nStartY); m_bFirstDraw = FALSE; } else { m_Lead.DrawEllipse(m_nStartX, m_nStartY, m_nEndX - m_nStartX, m_nEndY - m_nStartY); } if (m_nToolType == TOOL_SHAPE_ELLIPSE) { m_LeadPaint.GetShape().DrawEllipse( (long)m_nStartX, (long)m_nStartY, (long)(m_nEndX - m_nStartX), (long)(m_nEndY - m_nStartY) ); } else { //On Error Resume Next m_LeadPaint.GetRegion().Ellipse( (long)m_nStartX, (long)m_nStartY, (long)(m_nEndX - m_nStartX), (long)(m_nEndY - m_nStartY) ); hRgn1 = m_LeadPaint.GetRegion().GetHRgn(); m_LeadPaint.SetClipRgn(hRgn1); m_Lead.SetRgnHandle((long)hRgn1, (float)0, (float)0, L_RGN_SET); m_Lead.SetRgnFrameType(RGNFRAME_STATIC); // if (m_nStartX > m_Lead.GetBitmapWidth() || m_nStartY > m_Lead.GetBitmapHeight()) m_Lead.ClientToBitmap(m_nStartX, m_nStartY); if(m_Lead.GetConvertX() > m_Lead.GetBitmapWidth() || m_Lead.GetConvertY() > m_Lead.GetBitmapHeight()) { m_Lead.FreeRgn(); m_LeadPaint.SetClipRgn(NULL); } UpdateStatusBar(); } m_bDrawing = FALSE; } break; case TOOL_SHAPE_POLYGON: //MouseUP case TOOL_REGION_POLYGON: { if(!m_bDrawing) { if(m_nPointCount < 3) { m_nPointCount = 0; m_LeadPaint.SetPolygonCount(0); return; } if((x != m_LeadPaint.GetPolygonX(m_nPointCount - 1)) && (y != m_LeadPaint.GetPolygonY(m_nPointCount - 1))) { m_nPointCount++; m_LeadPaint.SetPolygonX(m_nPointCount - 1, x); m_LeadPaint.SetPolygonY(m_nPointCount - 1, y); } if(m_nToolType == TOOL_SHAPE_POLYGON) m_LeadPaint.GetShape().DrawPolygon(0); else { m_LeadPaint.GetRegion().Polygon(0); hRgn1 = m_LeadPaint.GetRegion().GetHRgn(); m_LeadPaint.SetClipRgn(hRgn1); m_Lead.SetRgnHandle(hRgn1, 0, 0, L_RGN_SET); m_Lead.SetRgnFrameType(RGNFRAME_STATIC); UpdateStatusBar(); } m_nPointCount = 0; m_LeadPaint.SetPolygonCount(0); } else { //don't add the point if it is the same as the previous point if((x == m_LeadPaint.GetPolygonX(m_nPointCount - 1)) && (y == m_LeadPaint.GetPolygonY(m_nPointCount - 1))) { return; } m_nPointCount++; OldX = (float)x; OldY = (float)y; m_LeadPaint.SetPolygonX(m_nPointCount - 1, x); m_LeadPaint.SetPolygonY(m_nPointCount - 1, y); x = (long)OldX; y = (long)OldY; m_Lead.DrawLine(m_nStartX, m_nStartY, OldX, OldY); m_nEndX = (float)x; m_nEndY = (float)y; m_Lead.DrawLine(m_nStartX, m_nStartY, OldX, OldY); m_nStartX = (float)x; m_nStartY = (float)y; } } break; } if(!m_bDrawing) { if(m_Lead.GetRgnArea()) { //force repaint of region frame m_Lead.SetRgnFrameType(RGNFRAME_NONE); m_Lead.SetRgnFrameType(RGNFRAME_STATIC); } m_Lead.SetEnableKeyboard(TRUE); m_Lead.SetEnableScroll(TRUE); } } void CPaintView::UpdateStatusBar(int nPane, char *pszMsg) { if (pszMsg == NULL) pszMsg = ""; CMainFrame *pMainFrame = ((CMainFrame*)theApp.GetMainWnd()); pMainFrame->UpdateStatusBar( pszMsg, nPane); } void CPaintView::OnToolBrush() { m_nToolType = TOOL_BRUSH; } void CPaintView::OnUpdateToolBrush(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_nToolType == TOOL_BRUSH); pCmdUI->Enable(!m_bDrawing); } void CPaintView::OnToolShapeLine() { m_nToolType = TOOL_SHAPE_LINE; } void CPaintView::OnUpdateToolShapeLine(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_nToolType == TOOL_SHAPE_LINE); pCmdUI->Enable(!m_bDrawing); } void CPaintView::OnToolShapePolygon() { m_nToolType = TOOL_SHAPE_POLYGON; } void CPaintView::OnUpdateToolShapePolygon(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_nToolType == TOOL_SHAPE_POLYGON); pCmdUI->Enable(!m_bDrawing); } void CPaintView::OnToolShapeRectangle() { m_nToolType = TOOL_SHAPE_RECT; } void CPaintView::OnUpdateToolShapeRectangle(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_nToolType == TOOL_SHAPE_RECT); pCmdUI->Enable(!m_bDrawing); } void CPaintView::OnToolShapeRoundrectangle() { m_nToolType = TOOL_SHAPE_ROUNDRECT; } void CPaintView::OnUpdateToolShapeRoundrectangle(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_nToolType == TOOL_SHAPE_ROUNDRECT); pCmdUI->Enable(!m_bDrawing); } void CPaintView::OnToolShapeEllipse() { m_nToolType = TOOL_SHAPE_ELLIPSE; } void CPaintView::OnUpdateToolShapeEllipse(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_nToolType == TOOL_SHAPE_ELLIPSE); pCmdUI->Enable(!m_bDrawing); } void CPaintView::OnDblClickLeadctrl1() { switch(m_nToolType) { case TOOL_SHAPE_POLYGON: case TOOL_REGION_POLYGON: if(m_bDrawing) { //don't add the point if it is the same as the previous point if(m_nPointCount == 2) { if(((long)m_nEndX == m_LeadPaint.GetPolygonX(m_nPointCount - 1)) && ((long)m_nEndY == m_LeadPaint.GetPolygonY(m_nPointCount - 1))) { return; } } m_nPointCount++; m_LeadPaint.SetPolygonX(m_nPointCount - 1, (long)m_nEndX); m_LeadPaint.SetPolygonY(m_nPointCount - 1, (long)m_nEndY); } break; } m_bDrawing = FALSE; m_Lead.ForceRepaint(); } void CPaintView::UpdateXForm() { if (m_Lead.GetBitmap()) { m_LeadPaint.UpdateXForm( (long)m_Lead.GetPaintZoomFactor(), (long)(-m_Lead.GetDstLeft()), (long)(-m_Lead.GetDstTop()) ); } } void CPaintView::OnScrollLeadctrl1() { UpdatePaintMetrics(); UpdateXForm(); } void CPaintView::UpdatePaintMetrics() { m_LeadPaint.SetMetrics(m_Lead.GetHWnd(), m_Lead.GetBitmap()); } void CPaintView::OnToolRegionBorder() { m_nToolType = TOOL_REGION_BORDER; } void CPaintView::OnUpdateToolRegionBorder(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_nToolType == TOOL_REGION_BORDER); pCmdUI->Enable(!m_bDrawing); } void CPaintView::OnToolRegionCancel() { m_Lead.FreeRgn(); m_LeadPaint.SetClipRgn(0); m_Lead.ForceRepaint(); } void CPaintView::OnUpdateToolRegionCancel(CCmdUI* pCmdUI) { if(m_bDrawing) pCmdUI->Enable(FALSE); else pCmdUI->Enable(m_Lead.GetHasRgn()==TRUE); } void CPaintView::OnToolRegionColor() { m_nToolType = TOOL_REGION_COLOR; } void CPaintView::OnUpdateToolRegionColor(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_nToolType == TOOL_REGION_COLOR); pCmdUI->Enable(!m_bDrawing); } void CPaintView::OnToolRegionEllipse() { m_nToolType = TOOL_REGION_ELLIPSE; } void CPaintView::OnUpdateToolRegionEllipse(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_nToolType == TOOL_REGION_ELLIPSE); pCmdUI->Enable(!m_bDrawing); } void CPaintView::OnToolRegionPolygon() { m_nToolType = TOOL_REGION_POLYGON; } void CPaintView::OnUpdateToolRegionPolygon(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_nToolType == TOOL_REGION_POLYGON); pCmdUI->Enable(!m_bDrawing); } void CPaintView::OnToolRegionRectangle() { m_nToolType = TOOL_REGION_RECT; } void CPaintView::OnUpdateToolRegionRectangle(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_nToolType == TOOL_REGION_RECT); pCmdUI->Enable(!m_bDrawing); } void CPaintView::OnToolRegionRoundrectangle() { m_nToolType = TOOL_REGION_ROUNDRECT; } void CPaintView::OnUpdateToolRegionRoundrectangle(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_nToolType == TOOL_REGION_ROUNDRECT); pCmdUI->Enable(!m_bDrawing); } void CPaintView::OnToolRegionSurface() { m_nToolType = TOOL_REGION_SURFACE; } void CPaintView::OnUpdateToolRegionSurface(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_nToolType == TOOL_REGION_SURFACE); pCmdUI->Enable(!m_bDrawing); } void CPaintView::OnToolFillBorder() { m_nToolType = TOOL_FILL_BORDER; } void CPaintView::OnUpdateToolFillBorder(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_nToolType == TOOL_FILL_BORDER); pCmdUI->Enable(!m_bDrawing); } void CPaintView::OnToolFillColorreplace() { m_nToolType = TOOL_FILL_COLORREPLACE; } void CPaintView::OnUpdateToolFillColorreplace(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_nToolType == TOOL_FILL_COLORREPLACE); pCmdUI->Enable(!m_bDrawing); } void CPaintView::OnToolFillSurface() { m_nToolType = TOOL_FILL_SURFACE; } void CPaintView::OnUpdateToolFillSurface(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_nToolType == TOOL_FILL_SURFACE); pCmdUI->Enable(!m_bDrawing); } void CPaintView::OnToolText() { m_nToolType = TOOL_TEXT; } void CPaintView::OnUpdateToolText(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_nToolType == TOOL_TEXT); pCmdUI->Enable(!m_bDrawing); } void CPaintView::OnOptionsBrush() { int nRet; m_LeadPaint.SetEnableMethodErrors(FALSE); m_LeadPaint.SetDlgTitle("Brush Options"); m_LeadPaint.SetDlgFlags(PAINT_DLG_BRUSH_SHOWTOUCHCONTENT | PAINT_DLG_BRUSH_SHOWTOUCHCOLOR | PAINT_DLG_BRUSH_SHOWTOUCHIMAGE | PAINT_DLG_BRUSH_SHOWDIAMETER | PAINT_DLG_BRUSH_SHOWHARDNESS | PAINT_DLG_BRUSH_SHOWSPACING | PAINT_DLG_BRUSH_SHOWOPACITY | PAINT_DLG_BRUSH_SHOWDENSITY | PAINT_DLG_BRUSH_SHOWFADEOUTRATE | PAINT_DLG_BRUSH_SHOWTEXTURE | PAINT_DLG_BRUSH_SHOWDEFAULT ); m_LeadPaint.SetDlgTouchImageCount(1); m_LeadPaint.SetDlgTouchImage(0, "Leaves"); m_LeadPaint.SetDlgPaperTextureCount(1); m_LeadPaint.SetDlgPaperTexture(0, "Texture1"); if (m_LeadPaint.GetBrush().GetTexture()) m_LeadPaint.SetDlgPaperTextureIndex(0); else m_LeadPaint.SetDlgPaperTextureIndex(-1); nRet = m_LeadPaint.ShowBrushDlg((long)m_hWnd); if (nRet == 0) { m_LeadPaint.GetBrush().SetTouchColor ( m_LeadPaint.GetDlgTouchColor()); m_LeadPaint.GetBrush().SetTouchContentsType( m_LeadPaint.GetDlgTouchContentsType()); m_LeadPaint.GetBrush().SetDiameter(m_LeadPaint.GetDlgDiameter()); m_LeadPaint.GetBrush().SetHardnessValue (m_LeadPaint.GetDlgHardnessValue()); m_LeadPaint.GetBrush().SetSpacing(m_LeadPaint.GetDlgSpacing()); m_LeadPaint.GetBrush().SetOpacity(m_LeadPaint.GetDlgOpacity()); m_LeadPaint.GetBrush().SetDensity(m_LeadPaint.GetDlgDensity()); m_LeadPaint.GetBrush().SetFadeOutRate(m_LeadPaint.GetDlgFadeOut()); if (m_LeadPaint.GetDlgPaperTextureIndex() == 0) { m_LeadPaint.GetBrush().SetTexture(m_LeadPaper.GetBitmap()); } else { m_LeadPaint.GetBrush().SetTexture(0); } } } //(HINSTANCE hInstance, LPSTR lpString, HPALETTE FAR* lphPalette) void CPaintView::LoadResourceBitmap(long nResourceID) { HRSRC hRsrc; HGLOBAL hGlobal; HBITMAP hBitmapFinal = NULL; LPBITMAPINFOHEADER lpbi; HDC hdc; int iNumColors; HPALETTE hPalette; if (hRsrc = ::FindResource(theApp.m_hInstance, MAKEINTRESOURCE(nResourceID), RT_BITMAP)) { hGlobal = ::LoadResource(theApp.m_hInstance, hRsrc); lpbi = (LPBITMAPINFOHEADER)::LockResource(hGlobal); hdc = ::GetDC(NULL); hPalette = CreateDIBPalette((LPBITMAPINFO)lpbi, &iNumColors); if (hPalette) { SelectPalette(hdc,hPalette,FALSE); RealizePalette(hdc); } hBitmapFinal = CreateDIBitmap(hdc, (LPBITMAPINFOHEADER)lpbi, (LONG)CBM_INIT, (LPSTR)lpbi + lpbi->biSize + iNumColors * sizeof(RGBQUAD), (LPBITMAPINFO)lpbi, DIB_RGB_COLORS ); // m_LeadTemp.UnlockSupport(L_SUPPORT_DOCUMENT, L_KEY_DOCUMENT); // m_LeadTemp.UnlockSupport(L_SUPPORT_GIFLZW, L_KEY_GIFLZW); // m_LeadTemp.UnlockSupport(L_SUPPORT_TIFLZW, L_KEY_TIFLZW); // m_LeadTemp.UnlockSupport(L_SUPPORT_DIGITALPAINT, L_KEY_DIGITALPAINT); UNLOCKSUPPORT(m_LeadTemp); m_LeadTemp.SetDDB( (long)hdc, (long)hBitmapFinal, (long)hPalette); ::ReleaseDC(NULL,hdc); UnlockResource(hGlobal); FreeResource(hGlobal); ::DeleteObject(hPalette); ::DeleteObject(hBitmapFinal); } } HPALETTE CPaintView::CreateDIBPalette (LPBITMAPINFO lpbmi, LPINT lpiNumColors) { LPBITMAPINFOHEADER lpbi; LPLOGPALETTE lpPal; HANDLE hLogPal; HPALETTE hPal = NULL; int i; lpbi = (LPBITMAPINFOHEADER)lpbmi; if (lpbi->biBitCount <= 8) *lpiNumColors = (1 << lpbi->biBitCount); else *lpiNumColors = 0; // No palette needed for 24 BPP DIB if (lpbi->biClrUsed > 0) *lpiNumColors = lpbi->biClrUsed; // Use biClrUsed if (*lpiNumColors) { hLogPal = GlobalAlloc (GHND, sizeof (LOGPALETTE) + sizeof (PALETTEENTRY) * (*lpiNumColors)); lpPal = (LPLOGPALETTE) GlobalLock (hLogPal); lpPal->palVersion = 0x300; lpPal->palNumEntries = *lpiNumColors; for (i = 0; i < *lpiNumColors; i++) { lpPal->palPalEntry[i].peRed = lpbmi->bmiColors[i].rgbRed; lpPal->palPalEntry[i].peGreen = lpbmi->bmiColors[i].rgbGreen; lpPal->palPalEntry[i].peBlue = lpbmi->bmiColors[i].rgbBlue; lpPal->palPalEntry[i].peFlags = 0; } hPal = CreatePalette (lpPal); GlobalUnlock (hLogPal); GlobalFree (hLogPal); } return hPal; } void CPaintView::OnOptionsShape() { int nRet; m_LeadPaint.SetEnableMethodErrors(FALSE); m_LeadPaint.SetDlgTitle("ShapeOptions"); m_LeadPaint.SetDlgFlags(PAINT_DLG_SHAPE_SHOWALL); m_LeadPaint.SetDlgShapeBackgroundStyle(m_LeadPaint.GetShape().GetBackgroundStyle()); m_LeadPaint.SetDlgBackgroundColor(m_LeadPaint.GetShape().GetBackgroundColor()); m_LeadPaint.SetDlgShapeGradientStyle(m_LeadPaint.GetShape().GetGradientStyle()); m_LeadPaint.SetDlgGradientStartColor(m_LeadPaint.GetShape().GetGradientStartColor()); m_LeadPaint.SetDlgGradientEndColor(m_LeadPaint.GetShape().GetGradientEndColor()); m_LeadPaint.SetDlgGradientSteps(m_LeadPaint.GetShape().GetGradientSteps()); m_LeadPaint.SetDlgRoundRectEllipseWidth(m_LeadPaint.GetShape().GetRoundRectEllipseWidth()); m_LeadPaint.SetDlgRoundRectEllipseHeight(m_LeadPaint.GetShape().GetRoundRectEllipseHeight()); m_LeadPaint.SetDlgPaperTextureCount(1); m_LeadPaint.SetDlgPaperTexture(0,"Texture1"); if(m_LeadPaint.GetShape().GetTexture()!=0) m_LeadPaint.SetDlgPaperTextureIndex(0); else m_LeadPaint.SetDlgPaperTextureIndex(-1); m_LeadPaint.SetDlgBackgroundTileBitmapCount(1); m_LeadPaint.SetDlgBackgroundTileBitmap(0,"Tile0"); m_LeadPaint.SetDlgBorderTileBitmapCount(1); m_LeadPaint.SetDlgBorderTileBitmap(0,"Border0"); m_LeadPaint.SetDlgBorderStyle(m_LeadPaint.GetShape().GetBorderStyle()); m_LeadPaint.SetDlgBorderWidth((short)m_LeadPaint.GetShape().GetBorderWidth()); m_LeadPaint.SetDlgShapeBorderBrushStyle(m_LeadPaint.GetShape().GetBorderBrushStyle()); m_LeadPaint.SetDlgBorderColor(m_LeadPaint.GetShape().GetBorderColor()); m_LeadPaint.SetDlgBorderEndCap(m_LeadPaint.GetShape().GetBorderEndCap()); nRet=m_LeadPaint.ShowShapeDlg((long)m_hWnd); if(nRet==0) { m_LeadPaint.GetShape().SetBackgroundStyle(m_LeadPaint.GetDlgShapeBackgroundStyle()); m_LeadPaint.GetShape().SetBackgroundColor(m_LeadPaint.GetDlgBackgroundColor()); m_LeadPaint.GetShape().SetGradientStyle(m_LeadPaint.GetDlgShapeGradientStyle()); m_LeadPaint.GetShape().SetGradientStartColor(m_LeadPaint.GetDlgGradientStartColor()); m_LeadPaint.GetShape().SetGradientEndColor(m_LeadPaint.GetDlgGradientEndColor()); m_LeadPaint.GetShape().SetGradientSteps(m_LeadPaint.GetDlgGradientSteps()); m_LeadPaint.GetShape().SetRoundRectEllipseWidth(m_LeadPaint.GetDlgRoundRectEllipseWidth()); m_LeadPaint.GetShape().SetRoundRectEllipseHeight(m_LeadPaint.GetDlgRoundRectEllipseHeight()); m_LeadPaint.GetShape().SetOpacity(m_LeadPaint.GetDlgOpacity()); if(m_LeadPaint.GetDlgPaperTextureIndex()==0) m_LeadPaint.GetShape().SetTexture(m_LeadBackground.GetBitmap()); else m_LeadPaint.GetShape().SetTexture(0); m_LeadPaint.GetShape().SetBorderStyle(m_LeadPaint.GetDlgBorderStyle()); m_LeadPaint.GetShape().SetBorderWidth(m_LeadPaint.GetDlgBorderWidth()); m_LeadPaint.GetShape().SetBorderBrushStyle(m_LeadPaint.GetDlgShapeBorderBrushStyle()); m_LeadPaint.GetShape().SetBorderColor(m_LeadPaint.GetDlgBorderColor()); m_LeadPaint.GetShape().SetBorderEndCap(m_LeadPaint.GetDlgBorderEndCap()); } } void CPaintView::OnOptionsRegion() { int nRet; m_LeadPaint.SetEnableMethodErrors(FALSE); m_LeadPaint.SetDlgTitle ( "Region Options"); m_LeadPaint.SetDlgFlags ( PAINT_DLG_REGION_SHOWALL); m_LeadPaint.SetDlgUpperTolerance ( m_LeadPaint.GetRegion().GetUpperTolerance()); m_LeadPaint.SetDlgLowerTolerance ( m_LeadPaint.GetRegion().GetLowerTolerance()); m_LeadPaint.SetDlgRoundRectEllipseWidth ( m_LeadPaint.GetRegion().GetRoundRectEllipseWidth()); m_LeadPaint.SetDlgRoundRectEllipseHeight ( m_LeadPaint.GetRegion().GetRoundRectEllipseHeight()); nRet = m_LeadPaint.ShowRegionDlg((long)m_hWnd); if (nRet == 0) { m_LeadPaint.GetRegion().SetUpperTolerance ( m_LeadPaint.GetDlgUpperTolerance()); m_LeadPaint.GetRegion().SetLowerTolerance ( m_LeadPaint.GetDlgLowerTolerance()); m_LeadPaint.GetRegion().SetRoundRectEllipseWidth ( m_LeadPaint.GetDlgRoundRectEllipseWidth()); m_LeadPaint.GetRegion().SetRoundRectEllipseHeight ( m_LeadPaint.GetDlgRoundRectEllipseHeight()); } } void CPaintView::OnOptionsFill() { int nRet; m_LeadPaint.SetEnableMethodErrors(FALSE); m_LeadPaint.SetDlgTitle ( "Fill Options"); m_LeadPaint.SetDlgFlags ( PAINT_DLG_SHAPE_SHOWALL); m_LeadPaint.SetDlgFillStyle ( m_LeadPaint.GetFill().GetStyle()); m_LeadPaint.SetDlgSolidFillColor ( m_LeadPaint.GetFill().GetSolidFillColor()); m_LeadPaint.SetDlgFillGradientStyle ( m_LeadPaint.GetFill().GetGradientStyle()); m_LeadPaint.SetDlgGradientStartColor ( m_LeadPaint.GetFill().GetGradientStartColor()); m_LeadPaint.SetDlgGradientEndColor ( m_LeadPaint.GetFill().GetGradientEndColor()); m_LeadPaint.SetDlgGradientSteps ( m_LeadPaint.GetFill().GetGradientSteps()); m_LeadPaint.SetDlgOpacity ( m_LeadPaint.GetFill().GetOpacity()); m_LeadPaint.SetDlgBackgroundTileBitmapCount ( 1); m_LeadPaint.SetDlgBackgroundTileBitmap(0, "Tile 0"); m_LeadPaint.SetDlgPaperTextureCount ( 1); m_LeadPaint.SetDlgPaperTexture(0, "Texture1"); if (m_LeadPaint.GetFill().GetTexture() != 0) { m_LeadPaint.SetDlgPaperTextureIndex ( 0); } else { m_LeadPaint.SetDlgPaperTextureIndex ( -1); } m_LeadPaint.SetDlgUpperTolerance ( m_LeadPaint.GetFill().GetUpperTolerance()); m_LeadPaint.SetDlgLowerTolerance ( m_LeadPaint.GetFill().GetLowerTolerance()); nRet = m_LeadPaint.ShowFillDlg((long)m_hWnd); if (nRet == 0) { m_LeadPaint.GetFill().SetStyle(m_LeadPaint.GetDlgFillStyle()); m_LeadPaint.GetFill().SetSolidFillColor(m_LeadPaint.GetDlgSolidFillColor()); m_LeadPaint.GetFill().SetGradientStyle ( m_LeadPaint.GetDlgFillGradientStyle()); m_LeadPaint.GetFill().SetGradientStartColor ( m_LeadPaint.GetDlgGradientStartColor()); m_LeadPaint.GetFill().SetGradientEndColor ( m_LeadPaint.GetDlgGradientEndColor()); m_LeadPaint.GetFill().SetGradientSteps ( m_LeadPaint.GetDlgGradientSteps()); m_LeadPaint.GetFill().SetOpacity ( m_LeadPaint.GetDlgOpacity()); if (m_LeadPaint.GetDlgPaperTextureIndex() == 0) { m_LeadPaint.GetFill().SetTexture ( m_LeadPaper.GetBitmap()); } else { m_LeadPaint.GetFill().SetTexture ( 0); } m_LeadPaint.GetFill().SetUpperTolerance ( m_LeadPaint.GetDlgUpperTolerance()); m_LeadPaint.GetFill().SetLowerTolerance ( m_LeadPaint.GetDlgLowerTolerance()); } } void CPaintView::OnOptionsText() { int nRet; m_LeadPaint.SetEnableMethodErrors(FALSE); m_LeadPaint.SetDlgTitle ( "Text Options"); m_LeadPaint.SetDlgFlags ( PAINT_DLG_TEXT_SHOWALL); m_LeadPaint.SetDlgTextString ( m_LeadPaint.GetText().GetString()); m_LeadPaint.SetDlgOpacity ( m_LeadPaint.GetText().GetOpacity()); m_LeadPaint.GetDlgTextFont().SetBold ( m_LeadPaint.GetText().GetFont().GetBold()); m_LeadPaint.GetDlgTextFont().SetItalic ( m_LeadPaint.GetText().GetFont().GetItalic()); m_LeadPaint.GetDlgTextFont().SetName ( m_LeadPaint.GetText().GetFont().GetName()); m_LeadPaint.GetDlgTextFont().SetSize ( m_LeadPaint.GetText().GetFont().GetSize()); m_LeadPaint.SetDlgBackgroundTileBitmapCount ( 1); m_LeadPaint.SetDlgBackgroundTileBitmap(0, "Tile 0"); m_LeadPaint.SetDlgPaperTextureCount ( 1); m_LeadPaint.SetDlgPaperTexture(0, "Texture1"); if (m_LeadPaint.GetText().GetTexture ()!= 0) { m_LeadPaint.SetDlgPaperTextureIndex ( 0); } else { m_LeadPaint.SetDlgPaperTextureIndex ( -1); } m_LeadPaint.SetDlgTextBackgroundStyle ( m_LeadPaint.GetText().GetBackgroundStyle()); m_LeadPaint.SetDlgBackgroundColor ( m_LeadPaint.GetText().GetBackgroundColor()); m_LeadPaint.SetDlgTextBorderBrushStyle ( m_LeadPaint.GetText().GetBorderBrushStyle()); m_LeadPaint.SetDlgBorderWidth ( (short)m_LeadPaint.GetText().GetBorderWidth()); m_LeadPaint.SetDlgBorderColor ( m_LeadPaint.GetText().GetBorderColor()); m_LeadPaint.SetDlgAlignment ( m_LeadPaint.GetText().GetAlignment()); m_LeadPaint.SetDlgTransformRotate ( m_LeadPaint.GetText().GetTransformRotate()); m_LeadPaint.SetDlgTransformScaleX ( m_LeadPaint.GetText().GetTransformScaleX()); m_LeadPaint.SetDlgTransformScaleY ( m_LeadPaint.GetText().GetTransformScaleY()); nRet = m_LeadPaint.ShowTextDlg((long)m_hWnd); if (nRet == 0) { m_LeadPaint.GetText().SetString(m_LeadPaint.GetDlgTextString()); m_LeadPaint.GetText().GetFont().SetBold( m_LeadPaint.GetDlgTextFont().GetBold()); m_LeadPaint.GetText().GetFont().SetItalic ( m_LeadPaint.GetDlgTextFont().GetItalic()); m_LeadPaint.GetText().GetFont().SetName ( m_LeadPaint.GetDlgTextFont().GetName()); m_LeadPaint.GetText().GetFont().SetSize ( m_LeadPaint.GetDlgTextFont().GetSize()); m_LeadPaint.GetText().SetOpacity ( m_LeadPaint.GetDlgOpacity()); if (m_LeadPaint.GetDlgPaperTextureIndex () == 0) { m_LeadPaint.GetText().SetTexture ( m_LeadPaper.GetBitmap()); } else { m_LeadPaint.GetText().SetTexture ( 0); } m_LeadPaint.GetText().SetBackgroundStyle ( m_LeadPaint.GetDlgTextBackgroundStyle()); m_LeadPaint.GetText().SetBackgroundColor ( m_LeadPaint.GetDlgBackgroundColor()); m_LeadPaint.GetText().SetBorderBrushStyle ( m_LeadPaint.GetDlgTextBorderBrushStyle()); m_LeadPaint.GetText().SetBorderWidth ( m_LeadPaint.GetDlgBorderWidth()); m_LeadPaint.GetText().SetBorderColor ( m_LeadPaint.GetDlgBorderColor()); m_LeadPaint.GetText().SetAlignment ( m_LeadPaint.GetDlgAlignment()); m_LeadPaint.GetText().SetTransformRotate ( m_LeadPaint.GetDlgTransformRotate()); m_LeadPaint.GetText().SetTransformScaleX ( m_LeadPaint.GetDlgTransformScaleX()); m_LeadPaint.GetText().SetTransformScaleY ( m_LeadPaint.GetDlgTransformScaleY()); } } void CPaintView::CreateDefaultObjects() { //create a Brushobject //set some properties m_LeadPaint.GetBrush().SetTouchShape(BRUSH_TOUCH_SHAPE_CIRCLE); m_LeadPaint.GetBrush().SetTouchContentsType(BRUSH_TOUCH_CONTENTS_COLOR); m_LeadPaint.GetBrush().SetTouchTransparentColor(RGB(0,0,0)); m_LeadPaint.GetBrush().SetTouchBitmap(m_LeadTouch.GetBitmap()); m_LeadPaint.GetBrush().SetTouchColor(RGB(0,0,0)); m_LeadPaint.GetBrush().SetDiameter(1); m_LeadPaint.GetBrush().SetHardnessDistributionType(BRUSH_HD_TYPE_0); m_LeadPaint.GetBrush().SetHardnessValue(1); m_LeadPaint.GetBrush().SetSpacing(1); m_LeadPaint.GetBrush().SetOpacity(0); m_LeadPaint.GetBrush().SetDensity(100); m_LeadPaint.GetBrush().SetFadeOutRate(0); //create Shapeobject //set some properties m_LeadPaint.GetShape().SetBackgroundStyle(SHAPE_BACKSTYLE_GRADIENT); m_LeadPaint.GetShape().SetBackgroundColor(RGB(255,0,0)); m_LeadPaint.GetShape().SetBorderStyle(SHAPE_BORDERSTYLE_SOLID); m_LeadPaint.GetShape().SetBorderWidth(3); m_LeadPaint.GetShape().SetBorderBrushStyle(SHAPE_BORDERBRUSHSTYLE_COLOR); m_LeadPaint.GetShape().SetBorderColor(RGB(0,0,0)); m_LeadPaint.GetShape().SetGradientStyle(SHAPE_GRADIENTSTYLE_CONE_FROM_LT); m_LeadPaint.GetShape().SetGradientStartColor(RGB(255,0,0)); m_LeadPaint.GetShape().SetGradientEndColor(RGB(0,0,255)); m_LeadPaint.GetShape().SetGradientSteps(255); m_LeadPaint.GetShape().SetBorderEndCap(SHAPE_BORDERENDCAP_ROUND); m_LeadPaint.GetShape().SetRoundRectEllipseHeight(25); m_LeadPaint.GetShape().SetRoundRectEllipseWidth(25); m_LeadPaint.GetShape().SetOpacity(0); m_LeadPaint.GetShape().SetBackgroundTileBitmap(m_LeadBackground.GetBitmap()); m_LeadPaint.GetShape().SetBorderTileBitmap(m_LeadBorder.GetBitmap()); //create a Region object //set some properties m_LeadPaint.GetRegion().SetLowerTolerance(RGB(25,25,25)); m_LeadPaint.GetRegion().SetUpperTolerance(RGB(25,25,25)); m_LeadPaint.GetRegion().SetRoundRectEllipseWidth(25); m_LeadPaint.GetRegion().SetRoundRectEllipseHeight(25); //create a Fill object //set some properties m_LeadPaint.GetFill().SetStyle(FILL_FILLSTYLE_SOLID); m_LeadPaint.GetFill().SetGradientStyle(FILL_GRADIENTSTYLE_LINE_L_TO_R); //m_LeadPaint.GetFill().SetGradientDirection(); m_LeadPaint.GetFill().SetSolidFillColor(RGB(255,0,0)); m_LeadPaint.GetFill().SetUpperTolerance(RGB(20,20,20)); m_LeadPaint.GetFill().SetLowerTolerance(RGB(20,20,20)); m_LeadPaint.GetFill().SetOpacity(1); m_LeadPaint.GetFill().SetBackgroundTileBitmap(m_LeadBackground.GetBitmap()); //create Text object //set some properties m_LeadPaint.GetText().GetFont().SetName("Arial"); m_LeadPaint.GetText().GetFont().SetBold(TRUE); m_LeadPaint.GetText().GetFont().SetItalic(TRUE); m_LeadPaint.GetText().GetFont().SetSize(20); m_LeadPaint.GetText().SetBorderBrushStyle(TEXT_BORDER_BRUSHSTYLE_COLOR); m_LeadPaint.GetText().SetBorderWidth(1); m_LeadPaint.GetText().SetBorderColor(RGB(255,0,0)); m_LeadPaint.GetText().SetBackgroundStyle(TEXT_BACKSTYLE_OPAQUE); m_LeadPaint.GetText().SetBackgroundColor(RGB(0,0,255)); m_LeadPaint.GetText().SetAlignment(PAINT_ALIGN_HCENTER | PAINT_ALIGN_VCENTER); m_LeadPaint.GetText().SetOpacity(1); m_LeadPaint.GetText().SetBackgroundTileBitmap(m_LeadBackground.GetBitmap()); m_LeadPaint.GetText().SetString("LEADTOOLS!"); } void CPaintView::OnEditCopy() { BeginWaitCursor(); m_Lead.Copy(COPY_DIB | COPY_DDB | COPY_PALETTE); EndWaitCursor(); } void CPaintView::OnFileSaveAs() { CString sFileName; int nRet; theApp.m_pRasterFileDlg->PutEnableMethodErrors(FALSE); theApp.m_pRasterFileDlg->PutFileDlgFlags(0); theApp.m_pRasterFileDlg->PutDialogTitle("Save File"); theApp.m_pRasterFileDlg->PutUIFlags(SAVE_SHOW_FILEOPTIONS_STAMP | SAVE_SHOW_FILEOPTIONS_BASICJ2KOPTIONS | SAVE_SHOW_FILEOPTIONS_J2KOPTIONS | SAVE_SHOW_FILEOPTIONS_MULTIPAGE | SAVE_SHOW_FILEOPTIONS_QFACTOR); nRet = theApp.m_pRasterFileDlg->ShowSaveDlg((long)theApp.m_pMainWnd->m_hWnd); if(nRet == 0 && theApp.m_pRasterFileDlg->GetDialogStatus() == DLG_OK) { sFileName = (LPTSTR)theApp.m_pRasterFileDlg->GetFileName(); int nFormat = theApp.m_pRasterFileDlg->GetSaveFormat(); int nBits = theApp.m_pRasterFileDlg->GetSaveBitsPerPixel(); int nQFactor = theApp.m_pRasterFileDlg->GetSaveQFactor(); int nMultipage = theApp.m_pRasterFileDlg->GetSaveMulti(); long nPage=1; switch(nMultipage) { case SAVE_APPEND: nPage = 2; break; case SAVE_OVERWRITE: nPage = 1; break; case SAVE_REPLACE: case SAVE_INSERT: nPage = theApp.m_pRasterFileDlg->GetPageNumber(); break; } switch(nFormat) { case FILE_J2K : case FILE_JP2 : case FILE_CMW : case FILE_TIF_J2K : case FILE_TIF_CMW : BOOL oldVal = m_Lead.GetEnableMethodErrors(); m_Lead.SetEnableMethodErrors(FALSE); SetJ2KOptions(); m_Lead.SetEnableMethodErrors(oldVal); break; } m_Lead.SetSavePage((short)nPage); m_Lead.SetSaveInterlaced(theApp.m_pRasterFileDlg->GetSaveInterlaced()); if(theApp.m_pRasterFileDlg->SaveWithStamp) { int nStampWidth,nStampHeight,nStampBits; nStampWidth = theApp.m_pRasterFileDlg->SaveStampWidth; nStampHeight = theApp.m_pRasterFileDlg->SaveStampHeight; nStampBits = theApp.m_pRasterFileDlg->SaveStampBits; nRet = m_Lead.SaveWithStamp(sFileName, nFormat, nBits, nQFactor,(float)nStampWidth,(float)nStampHeight,nStampBits); } else { nRet = m_Lead.Save(sFileName, nFormat, nBits, nQFactor, nMultipage); } if(nRet) { theApp.DisplayLEADError(nRet); } } else theApp.DisplayLEADError(nRet); return; } void CPaintView::SetJ2KOptions() { m_Lead.SetJ2KUseColorTransform(theApp.m_pRasterFileDlg->SaveJ2KUseColorTransform); m_Lead.SetJ2KDerivedQuantization(theApp.m_pRasterFileDlg->SaveJ2KDerivedQuantization); m_Lead.SetJ2KCompressionControl(theApp.m_pRasterFileDlg->GetSaveJ2KCompressionControl()); m_Lead.SetJ2KCompressionRatio(theApp.m_pRasterFileDlg->SaveJ2KCompressionRatio); m_Lead.SetJ2KTargetFileSize(theApp.m_pRasterFileDlg->SaveJ2KTargetFileSize); m_Lead.SetJ2KXOsiz(theApp.m_pRasterFileDlg->SaveJ2KXOsiz); m_Lead.SetJ2KYOsiz(theApp.m_pRasterFileDlg->SaveJ2KYOsiz); m_Lead.SetJ2KXTsiz(theApp.m_pRasterFileDlg->SaveJ2KXTsiz); m_Lead.SetJ2KYTsiz(theApp.m_pRasterFileDlg->SaveJ2KYTsiz); m_Lead.SetJ2KXTOsiz(theApp.m_pRasterFileDlg->SaveJ2KXTOsiz); m_Lead.SetJ2KYTOsiz(theApp.m_pRasterFileDlg->SaveJ2KYTOsiz); m_Lead.SetJ2KDecompLevel(theApp.m_pRasterFileDlg->SaveJ2KDecompLevel); m_Lead.SetJ2KProgressOrder(theApp.m_pRasterFileDlg->GetSaveJ2KProgressOrder()); m_Lead.SetJ2KCodBlockWidth(theApp.m_pRasterFileDlg->SaveJ2KCodBlockWidth); m_Lead.SetJ2KCodBlockHeight(theApp.m_pRasterFileDlg->SaveJ2KCodBlockHeight); m_Lead.SetJ2KCBS_SelectiveACBypass(theApp.m_pRasterFileDlg->SaveJ2KCBS_SelectiveACBypass); m_Lead.SetJ2KCBS_ResetContextOnBoundaries(theApp.m_pRasterFileDlg->SaveJ2KCBS_ResetContextOnBoundaries); m_Lead.SetJ2KCBS_TerminationOnEachPass(theApp.m_pRasterFileDlg->SaveJ2KCBS_TerminationOnEachPass); m_Lead.SetJ2KCBS_VerticallyCausalContext(theApp.m_pRasterFileDlg->SaveJ2KCBS_VerticallyCausalContext); m_Lead.SetJ2KCBS_PredictableTermination(theApp.m_pRasterFileDlg->SaveJ2KCBS_PredictableTermination); m_Lead.SetJ2KCBS_ErrorResilienceSymbol(theApp.m_pRasterFileDlg->SaveJ2KCBS_ErrorResilienceSymbol); m_Lead.SetJ2KGuardBits(theApp.m_pRasterFileDlg->SaveJ2KGuardBits); m_Lead.SetJ2KDerivedBaseMantissa(theApp.m_pRasterFileDlg->SaveJ2KDerivedBaseMantissa); m_Lead.SetJ2KDerivedBaseExponent(theApp.m_pRasterFileDlg->SaveJ2KDerivedBaseExponent); m_Lead.SetJ2KUseSOPMarker(theApp.m_pRasterFileDlg->SaveJ2KUseSOPMarker); m_Lead.SetJ2KUseEPHMarker(theApp.m_pRasterFileDlg->SaveJ2KUseEPHMarker); } void CPaintView::OnViewZoomIn() { if (m_Lead.GetPaintZoomFactor() < 1600) { if ( m_Lead.GetPaintZoomFactor() >= 100) m_Lead.SetPaintZoomFactor(m_Lead.GetPaintZoomFactor() + 100); else m_Lead.SetPaintZoomFactor(m_Lead.GetPaintZoomFactor() * 2); } UpdateXForm(); } void CPaintView::OnViewZoomOut() { if (m_Lead.GetPaintZoomFactor() >= 25 ) { if (m_Lead.GetPaintZoomFactor() > 100) m_Lead.SetPaintZoomFactor( m_Lead.GetPaintZoomFactor() - 100 ); else m_Lead.SetPaintZoomFactor( m_Lead.GetPaintZoomFactor() / 2 ); } UpdateXForm(); } LRESULT CPaintView::OnDoRealize(WPARAM wParam, LPARAM lParam) { if( !IsWindow(m_Lead.m_hWnd) || !m_Lead.GetBitmap() ) return FALSE; if(lParam) { return m_Lead.SendMessage(WM_PALETTECHANGED, wParam); } else { return m_Lead.SendMessage(WM_QUERYNEWPALETTE,0); } } void CPaintView::OnActivateView(BOOL bActivate, CView* pActivateView, CView* pDeactiveView) { CFormView::OnActivateView(bActivate, pActivateView, pDeactiveView); if (bActivate) { ASSERT(pActivateView == this); OnDoRealize((WPARAM)theApp.m_pMainWnd->m_hWnd, (LPARAM) FALSE); // same as SendMessage(WM_DOREALIZE); if(m_Lead.GetBitmap()) m_Lead.ForceRepaint(); } }