⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 editorview.cpp

📁 Embedded vc++下开发的可编辑地图程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
          // 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 + -