www.pudn.com > drawpad.zip > DrawPadView.cpp
// DrawPadView.cpp : implementation of the CDrawPadView class
//
#include "stdafx.h"
#include "DrawPad.h"
#include "DrawPadDoc.h"
#include "DrawPadView.h"
#include "entity.h"
#include "eselection.h"
#include "linetool.h"
#include "selecttool.h"
#include "ellipsetool.h"
#include "rectangletool.h"
#include "circletool.h"
#include "circlefilltool.h"
#include "ellipsefilltool.h"
#include "rectanglefilltool.h"
#include "texttool.h"
#include "textdlg2.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CDrawPadView
IMPLEMENT_DYNCREATE(CDrawPadView, CScrollView)
BEGIN_MESSAGE_MAP(CDrawPadView, CScrollView)
//{{AFX_MSG_MAP(CDrawPadView)
ON_COMMAND(ID_LINE, OnLine)
ON_WM_MOUSEMOVE()
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
ON_UPDATE_COMMAND_UI(ID_LINE, OnUpdateLine)
ON_COMMAND(ID_CIRCLE, OnCircle)
ON_UPDATE_COMMAND_UI(ID_CIRCLE, OnUpdateCircle)
ON_COMMAND(ID_STYLE, OnStyle)
ON_UPDATE_COMMAND_UI(ID_STYLE, OnUpdateStyle)
ON_COMMAND(ID_TEXT, OnText)
ON_UPDATE_COMMAND_UI(ID_TEXT, OnUpdateText)
ON_COMMAND(ID_SELECT, OnSelect)
ON_UPDATE_COMMAND_UI(ID_SELECT, OnUpdateSelect)
ON_COMMAND(ID_RECTANGLE, OnRectangle)
ON_UPDATE_COMMAND_UI(ID_RECTANGLE, OnUpdateRectangle)
ON_COMMAND(ID_ELLIPSE, OnEllipse)
ON_UPDATE_COMMAND_UI(ID_ELLIPSE, OnUpdateEllipse)
ON_COMMAND(ID_CIRCLEFILL, OnCirclefill)
ON_UPDATE_COMMAND_UI(ID_CIRCLEFILL, OnUpdateCirclefill)
ON_COMMAND(ID_ELLIPSEFILL, OnEllipsefill)
ON_UPDATE_COMMAND_UI(ID_ELLIPSEFILL, OnUpdateEllipsefill)
ON_COMMAND(ID_RECTANGLEFILL, OnRectanglefill)
ON_UPDATE_COMMAND_UI(ID_RECTANGLEFILL, OnUpdateRectanglefill)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CScrollView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CScrollView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CScrollView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDrawPadView construction/destruction
CDrawPadView::CDrawPadView()
{
// TODO: add construction code here
selection = new SELECTION(this);
selection->SetNotify(TRUE);
m_HArrow=AfxGetApp()->LoadStandardCursor(IDC_ARROW);
m_HCross=AfxGetApp()->LoadStandardCursor(IDC_CROSS);
m_Drawing = 0;
}
CDrawPadView::~CDrawPadView()
{
delete selection;
}
BOOL CDrawPadView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
m_ClassName=AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW,0,
(HBRUSH)::GetStockObject(WHITE_BRUSH),0);
cs.lpszClass=m_ClassName;
return CScrollView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CDrawPadView drawing
void CDrawPadView::OnDraw(CDC* pDC)
{
CDrawPadDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
pDoc->Draw(pDC);
GetSelection()->Draw();
}
void CDrawPadView::DrawEntity(ENTITY *ent, int method)
{
CDC *pDC = GetDC();
ent->Draw(pDC, method);
ReleaseDC(pDC);
}
/////////////////////////////////////////////////////////////////////////////
// CDrawPadView printing
BOOL CDrawPadView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CDrawPadView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CDrawPadView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CDrawPadView diagnostics
#ifdef _DEBUG
void CDrawPadView::AssertValid() const
{
CScrollView::AssertValid();
}
void CDrawPadView::Dump(CDumpContext& dc) const
{
CScrollView::Dump(dc);
}
CDrawPadDoc* CDrawPadView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDrawPadDoc)));
return (CDrawPadDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CDrawPadView message handlers
CDrawPadView *CDrawPadView::CurrentView()
{
CMDIFrameWnd *fWnd = (CMDIFrameWnd *)AfxGetMainWnd();
CMDIChildWnd *pWnd = fWnd->MDIGetActive();
if( !pWnd ) return 0;
return (CDrawPadView *)pWnd->GetActiveView();
}
MOUSE_TOOL *CDrawPadView::CurrentTool = new SELECT_TOOL;
void CDrawPadView::OnLine()
{
// TODO: Add your command handler code here
SetTool(new LINE_TOOL);
m_Drawing = ID_LINE;
}
/*void CDrawPadView::OnEllipse()
{
// TODO: Add your command handler code here
SetTool(new ELLIPSE_TOOL);
m_Drawing = ID_ELLIPSE;
}*/
//MOUSE_TOOL *CDrawPadView::CurrentTool =new SELECT_TOOL;
void CDrawPadView::SetTool(MOUSE_TOOL *newtool)
{
if( CurrentTool ) delete CurrentTool;
if( newtool )
CurrentTool = newtool;
else
CurrentTool = new SELECT_TOOL;
}
void CDrawPadView::OnMouseEvent(int evType, UINT nFlags, CPoint point)
{
if( CurrentTool ) {
PICK_EVENT pe(point, 0, this, nFlags);
CurrentTool->ProcessEvent(evType, pe);
}
}
void CDrawPadView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CClientDC ClientDC(this);
OnPrepareDC(&ClientDC);
ClientDC.DPtoLP(&point);
CSize ScrollSize=GetTotalSize();
CRect ScrollRect(0,0,ScrollSize.cx,ScrollSize.cy);
if(ScrollRect.PtInRect(point))
::SetCursor(m_HCross);
else
::SetCursor(m_HArrow);
OnMouseEvent(WM_MOUSEMOVE, nFlags, point);
CScrollView::OnMouseMove(nFlags, point);
}
void CDrawPadView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CClientDC ClientDC(this);
OnPrepareDC(&ClientDC);
ClientDC.DPtoLP(&point);
OnMouseEvent(WM_LBUTTONDOWN, nFlags, point);
m_bPoint=point;
CScrollView::OnLButtonDown(nFlags, point);
}
void CDrawPadView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CClientDC ClientDC(this);
OnPrepareDC(&ClientDC);
ClientDC.DPtoLP(&point);
OnMouseEvent(WM_LBUTTONUP, nFlags, point);
CRect rect(m_bPoint,point);
InvalidateRect(rect);
CScrollView::OnLButtonUp(nFlags, point);
}
void CDrawPadView::OnUpdateLine(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->SetCheck(CurrentTool && CurrentTool->IsKindOf(RUNTIME_CLASS(LINE_TOOL)));
// pCmdUI->SetCheck(m_Drawing == ID_LINE?TRUE:FALSE);
}
/*void CDrawPadView::OnRectangle()
{
// TODO: Add your command handler code here
SetTool(new RECTANGLE_TOOL);
m_Drawing = ID_RECTANGLE;
}*/
/*void CDrawPadView::OnUpdateRectangle(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->SetCheck(m_Drawing == ID_RECTANGLE?TRUE:FALSE);
}*/
/*void CDrawPadView::OnUpdateEllipseSolid(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->SetCheck(m_Drawing == ID_CIRCLEFILL?TRUE:FALSE);
}*/
/*void CDrawPadView::OnRectangleSolid()
{
// TODO: Add your command handler code here
m_Drawing = ID_RECTANGLEFILL;
}*/
/*void CDrawPadView::OnUpdateRectangleSolid(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->SetCheck(m_Drawing == ID_RECTANGLEFILL?TRUE:FALSE);
}*/
void CDrawPadView::OnCircle()
{
// TODO: Add your command handler code here
m_Drawing = ID_CIRCLE;
SetTool(new CIRCLE_TOOL);
}
void CDrawPadView::OnUpdateCircle(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->SetCheck(m_Drawing == ID_CIRCLE?TRUE:FALSE);
}
/*void CDrawPadView::OnRoundSolid()
{
// TODO: Add your command handler code here
m_Drawing = ID_ROUNDRECTANGLEFILL;
}
void CDrawPadView::OnUpdateRoundSolid(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->SetCheck(m_Drawing == ID_ROUNDRECTANGLEFILL?TRUE:FALSE);
}*/
void CDrawPadView::OnStyle()
{
// TODO: Add your command handler code here
}
void CDrawPadView::OnUpdateStyle(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
}
void CDrawPadView::OnText()
{
// TODO: Add your command handler code here
CDrawPadDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CTextDlg2 dlg;
dlg.m_edit1=pDoc->m_String;
dlg.m_dlgFont=pDoc->m_Font;
if(dlg.DoModal()==IDOK)
{
m_Drawing = ID_TEXT;
SetTool(new TEXT_TOOL);
pDoc->m_String=dlg.m_edit1;
pDoc->m_Font=dlg.m_dlgFont;
pDoc->m_Vertex=dlg.m_radio;
}
}
void CDrawPadView::OnUpdateText(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->SetCheck(m_Drawing == ID_TEXT?TRUE:FALSE);
}
/*void CDrawPadView::OnEllipseSolid()
{
// TODO: Add your command handler code here
m_Drawing = ID_CIRCLEFILL;
}*/
/*void CDrawPadView::OnUpdateEllipse(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->SetCheck(m_Drawing == ID_ELLIPSE?TRUE:FALSE);
}*/
void CDrawPadView::OnSelect()
{
// TODO: Add your command handler code here
SetTool(new SELECT_TOOL);
}
void CDrawPadView::OnUpdateSelect(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->SetCheck(CurrentTool && CurrentTool->IsKindOf(RUNTIME_CLASS(SELECT_TOOL)));
}
/*void CDrawPadView::OnUpdateEllipse(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
}*/
/*void CDrawPadView::OnEllipsefill()
{
// TODO: Add your command handler code here
}*/
/*void CDrawPadView::OnUpdateEllipsefill(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
}*/
void CDrawPadView::OnRectangle()
{
// TODO: Add your command handler code here
SetTool(new RECTANGLE_TOOL);
m_Drawing = ID_RECTANGLE;
}
void CDrawPadView::OnUpdateRectangle(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->SetCheck(m_Drawing == ID_RECTANGLE?TRUE:FALSE);
}
void CDrawPadView::OnEllipse()
{
// TODO: Add your command handler code here
SetTool(new ELLIPSE_TOOL);
m_Drawing = ID_ELLIPSE;
}
void CDrawPadView::OnUpdateEllipse(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->SetCheck(m_Drawing == ID_ELLIPSE?TRUE:FALSE);
}
void CDrawPadView::OnCirclefill()
{
// TODO: Add your command handler code here
SetTool(new CIRCLEFILL_TOOL);
m_Drawing = ID_CIRCLEFILL;
}
void CDrawPadView::OnUpdateCirclefill(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->SetCheck(m_Drawing == ID_CIRCLEFILL?TRUE:FALSE);
}
void CDrawPadView::OnEllipsefill()
{
// TODO: Add your command handler code here
SetTool(new ELLIPSEFILL_TOOL);
m_Drawing = ID_ELLIPSEFILL;
}
void CDrawPadView::OnUpdateEllipsefill(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->SetCheck(m_Drawing == ID_ELLIPSEFILL?TRUE:FALSE);
}
void CDrawPadView::OnRectanglefill()
{
// TODO: Add your command handler code here
SetTool(new RECTANGLEFILL_TOOL);
m_Drawing = ID_RECTANGLEFILL;
}
void CDrawPadView::OnUpdateRectanglefill(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->SetCheck(m_Drawing == ID_RECTANGLEFILL?TRUE:FALSE);
}
void CDrawPadView::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();
// TODO: Add your specialized code here and/or call the base class
SIZE Size={800,600};
SetScrollSizes(MM_TEXT,Size);
}