📄 stmeditorview.cpp
字号:
// STMEditorView.cpp : implementation of the CSTMEditorView class
//
#include "stdafx.h"
#include "STMEditor.h"
#include "STMEditorDoc.h"
#include "STMEditorView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#include "mainfrm.h"
/////////////////////////////////////////////////////////////////////////////
// CSTMEditorView
IMPLEMENT_DYNCREATE(CSTMEditorView, CScrollView)
BEGIN_MESSAGE_MAP(CSTMEditorView, CScrollView)
//{{AFX_MSG_MAP(CSTMEditorView)
ON_WM_SETCURSOR()
ON_WM_LBUTTONUP()
ON_WM_RBUTTONUP()
ON_WM_MOUSEMOVE()
ON_COMMAND(ID_VIEW_CROSS, OnViewCross)
ON_COMMAND(ID_VIEW_PATH, OnViewPath)
ON_COMMAND(ID_VIEW_REFRESH, OnViewRefresh)
ON_WM_LBUTTONDOWN()
ON_WM_KEYDOWN()
ON_COMMAND(ID_VIEW_OBJBROWSE, OnViewObjbrowse)
ON_WM_CREATE()
ON_COMMAND(ID_TOOL_DRAWSEL, OnToolDrawsel)
ON_COMMAND(ID_VIEW_ADDRESS, OnViewAddress)
ON_COMMAND(ID_VIEW_BK, OnViewBk)
ON_COMMAND(ID_VIEW_BS, OnViewBs)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND_RANGE(ID_FUNC_BROWSE,ID_FUNC_ADDRESS,OnFuncChange)
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()
/////////////////////////////////////////////////////////////////////////////
// CSTMEditorView construction/destruction
CSTMEditorView::CSTMEditorView()
{
// TODO: add construction code here
m_curBrowse=AfxGetApp()->LoadCursor(IDC_BROWSE);
m_curCross=AfxGetApp()->LoadCursor(IDC_LOCCROSS);
m_curPath=AfxGetApp()->LoadCursor(IDC_LOCPATH);
m_curBS=AfxGetApp()->LoadCursor(IDC_LOCBS);
m_curTR=AfxGetApp()->LoadCursor(IDC_LOCTR);
m_curStreet=AfxGetApp()->LoadCursor(IDC_LOCSTREET);
m_curAddress=AfxGetApp()->LoadCursor(IDC_LOCADDRESS);
m_Cursor=m_curCross;
m_curTool=0;
}
CSTMEditorView::~CSTMEditorView()
{
}
BOOL CSTMEditorView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CScrollView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CSTMEditorView drawing
void CSTMEditorView::OnDraw(CDC* pDC)
{
CSTMEditorDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
POINT point;
CRect rect;
point=GetScrollPosition();
GetClientRect(&rect);
rect.OffsetRect(point);
if(pDoc->m_Picture&&pDoc->m_bViewBK)
pDoc->m_Picture.Render(pDC,point.x,point.y,rect.Width(),rect.Height(),point.x,point.y,rect.Width(),rect.Height());
else
pDC->FillSolidRect(&rect,RGB(255,255,255));
if(pDoc->m_bViewPath) m_ehPath.DrawAllPathes();
if(pDoc->m_bViewCross) m_ehCross.DrawAllCrosses();
if(pDoc->m_bViewBS) m_ehBS.DrawAllBSes();
if(pDoc->m_bViewAddress) m_ehAddress.DrawAllAddresses();
}
void CSTMEditorView::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();
UpdateToolbarState();
OnFuncChange(ID_FUNC_BROWSE);
m_ehCross.m_pDoc=GetDocument();
m_ehCross.m_pMapView=this;
m_ehPath.m_pDoc=GetDocument();
m_ehPath.m_pMapView=this;
m_ehBS.m_pDoc=GetDocument();
m_ehBS.m_pMapView=this;
m_ehTR.m_pDoc=GetDocument();
m_ehTR.m_pMapView=this;
m_ehStreet.m_pDoc=GetDocument();
m_ehStreet.m_pMapView=this;
m_ehAddress.m_pDoc=GetDocument();
m_ehAddress.m_pMapView=this;
m_objBrowseDlg.m_pDoc=GetDocument();
}
/////////////////////////////////////////////////////////////////////////////
// CSTMEditorView printing
BOOL CSTMEditorView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CSTMEditorView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CSTMEditorView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CSTMEditorView diagnostics
#ifdef _DEBUG
void CSTMEditorView::AssertValid() const
{
CScrollView::AssertValid();
}
void CSTMEditorView::Dump(CDumpContext& dc) const
{
CScrollView::Dump(dc);
}
CSTMEditorDoc* CSTMEditorView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CSTMEditorDoc)));
return (CSTMEditorDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CSTMEditorView message handlers
void CSTMEditorView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint)
{
CSTMEditorDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
CSize sizeTotal;
// TODO: calculate the total size of this view
sizeTotal.cx= pDoc->m_Width,sizeTotal.cy=pDoc->m_Height;
SetScrollSizes(MM_TEXT, sizeTotal);
Invalidate();
}
BOOL CSTMEditorView::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
if(nHitTest==HTCLIENT)
{
::SetCursor(m_Cursor);
return TRUE;
}else
return CScrollView::OnSetCursor(pWnd, nHitTest, message);
}
void CSTMEditorView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CScrollView::OnLButtonUp(nFlags, point);
m_ehCross.OnLButtonUp(nFlags,point);
m_ehPath.OnLButtonUp(nFlags,point);
m_ehBS.OnLButtonUp(nFlags,point);
m_ehTR.OnLButtonUp(nFlags,point);
m_ehStreet.OnLButtonUp(nFlags,point);
m_ehAddress.OnLButtonUp(nFlags,point);
}
void CSTMEditorView::OnRButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CScrollView::OnRButtonUp(nFlags, point);
m_ehCross.OnRButtonUp(nFlags,point);
m_ehPath.OnRButtonUp(nFlags,point);
m_ehBS.OnRButtonUp(nFlags,point);
m_ehTR.OnRButtonUp(nFlags,point);
m_ehStreet.OnRButtonUp(nFlags,point);
m_ehAddress.OnRButtonUp(nFlags,point);
}
void CSTMEditorView::OnMouseMove(UINT nFlags, CPoint point)
{
CScrollView::OnMouseMove(nFlags, point);
CSTMEditorDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CPoint originpoint,tmpPt;
tmpPt=point;
originpoint=GetScrollPosition();
tmpPt.Offset(originpoint);
CMainFrame *frame=(CMainFrame *)AfxGetMainWnd();
frame->UpdateStatusBarPosPane(tmpPt);
if(pDoc->m_activeType!=ACT_CROSS_MOVE)
{
pDoc->GetFocusInfo(tmpPt);
if(pDoc->m_focusEI.index!=-1)
{
CString msg;
CString type;
switch (pDoc->m_focusEI.eleType)
{
case ET_CROSS: type="cross";break;
case ET_BS:type="bus station";break;
case ET_PATH:type="path";break;
case ET_ADDRESS:type="address";break;
default:type="error";break;
}
msg.Format("TYPE:%s;ID:%d",type,pDoc->m_focusEI.index);
frame->SetMessageText(msg);
}else
frame->SetMessageText("no focus");
}
m_ehCross.OnMouseMove(nFlags,point);
m_ehPath.OnMouseMove(nFlags,point);
m_ehBS.OnMouseMove(nFlags,point);
m_ehAddress.OnMouseMove(nFlags,point);
}
void CSTMEditorView::OnViewCross()
{
// TODO: Add your command handler code here
CSTMEditorDoc *pDoc=GetDocument();
pDoc->m_bViewCross=!pDoc->m_bViewCross;
UpdateToolbarState();
Invalidate(FALSE);
}
void CSTMEditorView::OnViewPath()
{
// TODO: Add your command handler code here
CSTMEditorDoc *pDoc=GetDocument();
pDoc->m_bViewPath=!pDoc->m_bViewPath;
UpdateToolbarState();
Invalidate(FALSE);
}
void CSTMEditorView::UpdateToolbarState()
{
CMainFrame *frame=(CMainFrame *)AfxGetMainWnd();
CSTMEditorDoc *pDoc=GetDocument();
frame->m_wndToolBar.GetToolBarCtrl().CheckButton(ID_VIEW_CROSS,pDoc->m_bViewCross);
frame->m_wndToolBar.GetToolBarCtrl().CheckButton(ID_VIEW_PATH,pDoc->m_bViewPath);
frame->m_wndToolBar.GetToolBarCtrl().CheckButton(ID_VIEW_BK,pDoc->m_bViewBK);
frame->m_wndToolBar.GetToolBarCtrl().CheckButton(ID_VIEW_BS,pDoc->m_bViewBS);
frame->m_wndToolBar.GetToolBarCtrl().CheckButton(ID_VIEW_ADDRESS,pDoc->m_bViewAddress);
}
void CSTMEditorView::OnFuncChange(UINT func)
{
// TODO: Add your command handler code here
CMainFrame *frame=(CMainFrame *)AfxGetMainWnd();
CSTMEditorDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if(m_curTool!=0)
frame->m_wndFuncBar.GetToolBarCtrl().CheckButton(m_curTool,FALSE);
m_curTool=func;
frame->m_wndFuncBar.GetToolBarCtrl().CheckButton(m_curTool,TRUE);
switch(func)
{
case ID_FUNC_BROWSE://browse
m_Cursor=m_curBrowse;
pDoc->m_activeType=ACT_BROWSE;
pDoc->m_selTool=ST_BROWSE;
break;
case ID_FUNC_CROSS://cross
m_Cursor=m_curCross;
pDoc->m_activeType=ACT_CROSS_PICK;
pDoc->m_selTool=ST_CROSS;
break;
case ID_FUNC_STATION: //bus station
m_Cursor=m_curBS;
pDoc->m_activeType=ACT_BS_PICK;
pDoc->m_selTool=ST_BS;
break;
case ID_FUNC_PATH://path
m_Cursor=m_curPath;
pDoc->m_activeType=ACT_PATH_PICK_BEGIN;
pDoc->m_selTool=ST_PATH;
break;
case ID_FUNC_TRAFFIC: //traffic
m_Cursor=m_curTR;
pDoc->m_activeType=ACT_TR_PICK_BEGIN;
pDoc->m_selTool=ST_TRAFFIC;
break;
case ID_FUNC_STREET:
m_Cursor=m_curStreet;
pDoc->m_activeType=ACT_STREET_PICK_BEGIN;
pDoc->m_selTool=ST_STREET;
break;
case ID_FUNC_ADDRESS:
m_Cursor=m_curAddress;
pDoc->m_activeType=ACT_ADDRESS_PICK;
pDoc->m_selTool=ST_ADDRESS;
break;
}
}
void CSTMEditorView::OnViewRefresh()
{
Invalidate(FALSE);
}
void CSTMEditorView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CScrollView::OnLButtonDown(nFlags, point);
ClearElementsSelFlag();
m_ehCross.OnLButtonDown(nFlags, point);
m_ehPath.OnLButtonDown(nFlags, point);
m_ehBS.OnLButtonDown(nFlags, point);
m_ehAddress.OnLButtonDown(nFlags, point);
}
void CSTMEditorView::DrawSelElements()
{
CSTMEditorDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
ELEINFO ei;
for(int i=0;i<pDoc->m_arrSel.GetSize();i++)
{
ei=pDoc->m_arrSel.GetAt(i);
switch(ei.eleType)
{
case ET_CROSS:
m_ehCross.DrawCross(ei.index);
break;
case ET_PATH:
m_ehPath.DrawPath(ei.index);
break;
case ET_BS:
m_ehBS.DrawBS(ei.index);
break;
case ET_ADDRESS:
m_ehAddress.DrawAddress(ei.index);
break;
}
}
}
void CSTMEditorView::ClearElementsSelFlag()
{
CSTMEditorDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
ELEINFO ei;
for(int i=pDoc->m_arrSel.GetSize()-1;i>=0;i--)
{
ei=pDoc->m_arrSel.GetAt(i);
pDoc->m_arrSel.RemoveAt(i);
switch(ei.eleType)
{
case ET_CROSS:
m_ehCross.DrawCross(ei.index);
break;
case ET_PATH:
m_ehPath.DrawPath(ei.index);
break;
case ET_BS:
m_ehBS.DrawBS(ei.index);
break;
case ET_ADDRESS:
m_ehAddress.DrawAddress(ei.index);
break;
}
}
}
void CSTMEditorView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
CScrollView::OnKeyDown(nChar, nRepCnt, nFlags);
}
void CSTMEditorView::OnViewObjbrowse()
{
m_objBrowseDlg.ShowWindow(SW_SHOW);
m_objBrowseDlg.OnRefresh();
}
int CSTMEditorView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CScrollView::OnCreate(lpCreateStruct) == -1)
return -1;
m_objBrowseDlg.Create(CSTMObjBrowseDlg::IDD,this);
m_objBrowseDlg.m_pView=this;
return 0;
}
void CSTMEditorView::OnToolDrawsel()
{
MessageBox("drawSel");
DrawSelElements();
}
void CSTMEditorView::OnViewAddress()
{
CSTMEditorDoc *pDoc=GetDocument();
pDoc->m_bViewAddress=!pDoc->m_bViewAddress;
UpdateToolbarState();
Invalidate(FALSE);
}
void CSTMEditorView::OnViewBk()
{
CSTMEditorDoc *pDoc=GetDocument();
pDoc->m_bViewBK=!pDoc->m_bViewBK;
UpdateToolbarState();
Invalidate(FALSE);
}
void CSTMEditorView::OnViewBs()
{
CSTMEditorDoc *pDoc=GetDocument();
pDoc->m_bViewBS=!pDoc->m_bViewBS;
UpdateToolbarState();
Invalidate(FALSE); // TODO: Add your command handler code here
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -