📄 editorview.cpp
字号:
// editorView.cpp : implementation of the CEditorView class
//
#include "stdafx.h"
#include "editor.h"
#include "editorDoc.h"
#include "editorView.h"
#include "DlgSelectLayer.h"
#include "DlgLayerManager.h"
#include "MainFrm.h "
#include "DlgSelect.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CEditorView
IMPLEMENT_DYNCREATE(CEditorView, CView)
BEGIN_MESSAGE_MAP(CEditorView, CView)
//{{AFX_MSG_MAP(CEditorView)
ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
ON_COMMAND(ID_FILE_CLOSE, OnFileClose)
ON_COMMAND(ID_FILE_ADD_LAYER, OnAddLayer)
ON_COMMAND(ID_MAP_ZOOMIN, OnMapZoomin)
ON_COMMAND(ID_MAP_ZOOMOUT, OnMapZoomout)
ON_COMMAND(ID_MAP_PAN, OnMapPan)
ON_COMMAND(ID_MAP_ZOOMFREE, OnMapZoomfree)
ON_COMMAND(ID_MAP_VIEW_ENTIRE, OnMapViewEntire)
ON_COMMAND(ID_MAP_REFRESH, OnMapRefresh)
ON_COMMAND(ID_MAP_POINT_SELECT, OnPointSelect)
ON_COMMAND(ID_MAP_RECT_SELECT, OnRectSelect)
ON_COMMAND(ID_MAP_LAYER_MANAGER, OnLayerManager)
ON_UPDATE_COMMAND_UI(ID_MAP_ZOOMIN, OnUpdateMapZoomin)
ON_UPDATE_COMMAND_UI(ID_MAP_ZOOMOUT, OnUpdateMapZoomout)
ON_UPDATE_COMMAND_UI(ID_MAP_PAN, OnUpdateMapPan)
ON_UPDATE_COMMAND_UI(ID_MAP_ZOOMFREE, OnUpdateMapZoomfree)
ON_UPDATE_COMMAND_UI(ID_MAP_POINT_SELECT, OnUpdatePointSelect)
ON_UPDATE_COMMAND_UI(ID_MAP_RECT_SELECT, OnUpdateRectSelect)
ON_COMMAND(ID_SELECT_EDIT_LAYER, OnSelectEditLayer)
ON_COMMAND(ID_EDIT_ADD_POINT, OnAddPoint)
ON_COMMAND(ID_EDIT_ADD_LINE, OnAddLine)
ON_COMMAND(ID_EDIT_ADD_POLYGON, OnAddPolygon)
ON_COMMAND(ID_EDIT_ADD_TEXT, OnAddText)
ON_COMMAND(ID_EDIT_TEXT, OnEditText)
ON_COMMAND(ID_EDIT_DELETE, OnDeleteObject)
ON_COMMAND(ID_EDIT_MOVE, OnMoveObject)
ON_COMMAND(ID_EDIT_ADD_VERTEX, OnAddVertex)
ON_COMMAND(ID_EDIT_DELETE_VERTEX, OnDeleteVertex)
ON_COMMAND(ID_EDIT_EDIT_VERTEX, OnEditVertex)
ON_UPDATE_COMMAND_UI(ID_EDIT_ADD_POINT, OnUpdateAddPoint)
ON_UPDATE_COMMAND_UI(ID_EDIT_ADD_LINE, OnUpdateAddLine)
ON_UPDATE_COMMAND_UI(ID_EDIT_ADD_POLYGON, OnUpdateAddPolygon)
ON_UPDATE_COMMAND_UI(ID_EDIT_ADD_TEXT, OnUpdateAddText)
ON_UPDATE_COMMAND_UI(ID_EDIT_TEXT, OnUpdateEditText)
ON_UPDATE_COMMAND_UI(ID_EDIT_DELETE, OnUpdateDeleteObject)
ON_UPDATE_COMMAND_UI(ID_EDIT_MOVE, OnUpdateMoveObject)
ON_UPDATE_COMMAND_UI(ID_EDIT_ADD_VERTEX, OnUpdateAddVertex)
ON_UPDATE_COMMAND_UI(ID_EDIT_DELETE_VERTEX, OnUpdateDeleteVertex)
ON_UPDATE_COMMAND_UI(ID_EDIT_EDIT_VERTEX, OnUpdateEditVertex)
ON_WM_LBUTTONDBLCLK()
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CEditorView construction/destruction
CEditorView::CEditorView()
{//初始化成员变量
m_bFileOpened = false;
m_strEditableLayer="";
}
CEditorView::~CEditorView()
{
}
BOOL CEditorView::PreCreateWindow(CREATESTRUCT& cs)
{
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CEditorView drawing
void CEditorView::OnDraw(CDC* pDC)
{
CEditorDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CRect rcClient;
GetClientRect( &rcClient );
if(!m_bFileOpened)
{
//显示启动画面,地图还没有显示的时候!
CDC dc;
dc.CreateCompatibleDC(pDC);
CBitmap bmp;
bmp.LoadBitmap( IDB_BITMAP_STARTUP_PAGE );
CBitmap *pBitmapSaved = dc.SelectObject(&bmp);
pDC->BitBlt(0,0,rcClient.Width(),rcClient.Height(),&dc,0,0,SRCCOPY);
dc.SelectObject(pBitmapSaved);
dc.DeleteDC();
bmp.DeleteObject();
}
else
{
//显示地图
m_MapWnd.OnDraw(pDC, rcClient,rcClient);
}
}
/////////////////////////////////////////////////////////////////////////////
// CEditorView diagnostics
#ifdef _DEBUG
void CEditorView::AssertValid() const
{
CView::AssertValid();
}
void CEditorView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CEditorDoc* CEditorView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CEditorDoc)));
return (CEditorDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CEditorView message handlers
void CEditorView::OnFileOpen()
{
//默认打开第一幅地图,否则新建Untitled地图,等待添加图层
CFileDialog dlgFile(true, _T("pmw|pmw|*.*"), NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,_T("WorkSpace Files (*.pmw)|*.pmw") );
if( dlgFile.DoModal() == IDOK )
{
//如果已经打开工作空间文件,则关闭
if(theApp.m_WorkSpace.IsOpen())
{
theApp.m_WorkSpace.Close();
m_MapWnd.Close();
m_bFileOpened = false;
}
//获得图形文件的完整路径及文件名
CString strFileName = dlgFile.GetPathName();
//打开工作空间
if( theApp.m_WorkSpace.Open( strFileName ) )
{
CSeMaps *pMaps = theApp.m_WorkSpace.GetMaps();
if( pMaps )
{
CSeMapDef MapDef;
//有地图,则打开第一幅
if ( pMaps->GetMapCount() != 0 )
{
CDlgSelect dlg;
dlg.m_bMap = true;
if ( dlg.DoModal() == IDOK )
{
if( pMaps->GetMap( dlg.m_strMapName, MapDef ) )
{
if(m_MapWnd.OpenMap(MapDef))
{
m_MapWnd.Refresh();
}
}
}
}
//没有默认地图,则新建地图
else
{
MapDef.m_strMapName = _T("Untitled");
pMaps->AddMap( MapDef );
}
}
m_bFileOpened = true;
}
}
}
void CEditorView::OnAddLayer()
{//在当前地图中添加图层
CDlgSelect dlg;
if ( dlg.DoModal() == IDOK )//选择数据集对话框
{
CSeDataSource *pDataSource = theApp.m_WorkSpace.GetDataSourceByAlias( dlg.m_strDatasourceAlias );
if ( pDataSource )
{
CSeDataset *pDataset = pDataSource->GetDataset( dlg.m_strDatasetName );
if (pDataset)
{
//将所选数据集添加到地图中作为一个图层
m_MapWnd.AddLayer(pDataset);
m_MapWnd.Refresh();
}
}
}
}
void CEditorView::OnFileClose()
{//文件关闭
m_MapWnd.Close();
theApp.m_WorkSpace.Close();
m_MapWnd.Refresh();
m_bFileOpened = false;
}
void CEditorView::OnMapZoomin()
{//放大
m_MapWnd.SetAction(CSeDrawParameters::uaZoomIn);
}
void CEditorView::OnMapZoomout()
{//缩小
m_MapWnd.SetAction(CSeDrawParameters::uaZoomOut);
}
void CEditorView::OnMapPan()
{//平移
m_MapWnd.SetAction(CSeDrawParameters::uaPan);
}
void CEditorView::OnMapZoomfree()
{//自由缩放
m_MapWnd.SetAction(CSeDrawParameters::uaZoomFree);
}
void CEditorView::OnMapViewEntire()
{//整幅显示地图
m_MapWnd.SetAction(CSeDrawParameters::uaNull);
m_MapWnd.ViewEntire();
}
void CEditorView::OnMapRefresh()
{//刷新
m_MapWnd.SetAction(CSeDrawParameters::uaNull);
m_MapWnd.Refresh();
}
void CEditorView::OnPointSelect()
{//点选
m_MapWnd.SetAction(CSeDrawParameters::uaPointModeSelect);
}
void CEditorView::OnRectSelect()
{//框选
m_MapWnd.SetAction(CSeDrawParameters::uaRectModeSelect);
}
void CEditorView::OnLayerManager()
{//弹出图层管理对话框
CDlgLayerManager dlg;
dlg.m_pMapWnd = &m_MapWnd;
dlg.DoModal();
}
void CEditorView::OnUpdateMapZoomin(CCmdUI* pCmdUI)
{//界面响应函数
pCmdUI->SetCheck(m_MapWnd.GetAction()==CSeDrawParameters::uaZoomIn );
}
void CEditorView::OnUpdateMapZoomout(CCmdUI* pCmdUI)
{//界面响应函数
pCmdUI->SetCheck(m_MapWnd.GetAction()==CSeDrawParameters::uaZoomOut );
}
void CEditorView::OnUpdateMapPan(CCmdUI* pCmdUI)
{//界面响应函数
pCmdUI->SetCheck(m_MapWnd.GetAction()==CSeDrawParameters::uaPan );
}
void CEditorView::OnUpdateMapZoomfree(CCmdUI* pCmdUI)
{//界面响应函数
pCmdUI->SetCheck(m_MapWnd.GetAction()==CSeDrawParameters::uaZoomFree );
}
void CEditorView::OnUpdatePointSelect(CCmdUI* pCmdUI)
{//界面响应函数
pCmdUI->SetCheck(m_MapWnd.GetAction()==CSeDrawParameters::uaPointModeSelect );
}
void CEditorView::OnUpdateRectSelect(CCmdUI* pCmdUI)
{//界面响应函数
pCmdUI->SetCheck(m_MapWnd.GetAction()==CSeDrawParameters::uaRectModeSelect );
}
void CEditorView::OnSelectEditLayer()
{
//弹出选择可编辑图层对话框
CDlgSelectLayer dlg;
dlg.m_pMapWnd = &m_MapWnd;
if (dlg.DoModal()== IDOK )
{
m_strEditableLayer = dlg.m_strLayerName;
//设置可编辑图层
if ( m_MapWnd.SetEditableLayer( m_strEditableLayer ) )
{
//打开编辑工具条
CMainFrame *pFrame=(CMainFrame*)AfxGetMainWnd();
pFrame->m_wndEditBar.ShowWindow( SW_SHOW );
pFrame->RecalcLayout();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -