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

📄 mapoperationview.cpp

📁 Embedded vc++下开发的地图基本操作程序
💻 CPP
字号:
    // MapOperationView.cpp : implementation of the CMapOperationView class
//

#include "stdafx.h"
#include "MapOperation.h"

#include "MapOperationDoc.h"
#include "MapOperationView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CMapOperationView

IMPLEMENT_DYNCREATE(CMapOperationView, CView)

BEGIN_MESSAGE_MAP(CMapOperationView, CView)
	//{{AFX_MSG_MAP(CMapOperationView)
	ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
	ON_COMMAND(ID_FILE_CLOSE, OnFileClose)
	ON_COMMAND(ID_MAP_ZOOMIN, OnMapZoomin)
	ON_UPDATE_COMMAND_UI(ID_MAP_ZOOMIN, OnUpdateMapZoomin)
	ON_COMMAND(ID_MAP_ZOOMOUT, OnMapZoomout)
	ON_UPDATE_COMMAND_UI(ID_MAP_ZOOMOUT, OnUpdateMapZoomout)
	ON_COMMAND(ID_MAP_PAN, OnMapPan)
	ON_UPDATE_COMMAND_UI(ID_MAP_PAN, OnUpdateMapPan)
	ON_COMMAND(ID_MAP_ZOOMFREE, OnMapZoomfree)
	ON_UPDATE_COMMAND_UI(ID_MAP_ZOOMFREE, OnUpdateMapZoomfree)
	ON_COMMAND(ID_MAP_SMOOTH_ZOOMFREE, OnMapSmoothZoomfree)
	ON_UPDATE_COMMAND_UI(ID_MAP_SMOOTH_ZOOMFREE, OnUpdateMapSmoothZoomfree)
	ON_COMMAND(ID_MAP_SMOOTH_PAN, OnMapSmoothPan)
	ON_UPDATE_COMMAND_UI(ID_MAP_SMOOTH_PAN, OnUpdateMapSmoothPan)
	ON_COMMAND(ID_MAP_POINT_SELECT, OnMapPointSelect)
	ON_COMMAND(ID_MAP_RECT_SELECT, OnMapRectSelect)
	ON_COMMAND(ID_MAP_VIEWENTIRE, OnMapViewEntire)
	ON_COMMAND(ID_MAP_REFRESH, OnMapRefresh)
	ON_WM_LBUTTONDBLCLK()
	ON_WM_LBUTTONDOWN()
	ON_WM_LBUTTONUP()
	ON_UPDATE_COMMAND_UI(ID_MAP_POINT_SELECT, OnUpdateMapPointSelect)
	ON_UPDATE_COMMAND_UI(ID_MAP_RECT_SELECT, OnUpdateMapRectSelect)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMapOperationView construction/destruction

CMapOperationView::CMapOperationView()
{
	m_bFileOpened = false;

}

CMapOperationView::~CMapOperationView()
{
}

BOOL CMapOperationView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CMapOperationView drawing

void CMapOperationView::OnDraw(CDC* pDC)
{
	CMapOperationDoc* 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);		
	}
}

/////////////////////////////////////////////////////////////////////////////
// CMapOperationView diagnostics

#ifdef _DEBUG
void CMapOperationView::AssertValid() const
{
	CView::AssertValid();
}

void CMapOperationView::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}

CMapOperationDoc* CMapOperationView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMapOperationDoc)));
	return (CMapOperationDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CMapOperationView message handlers

void CMapOperationView::OnFileOpen() 
{

	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 )
			{
				if ( pMaps->GetMapCount() > 0 ) 
				{
					CSeMapDef MapDef;
					
					//打开地图方法一: 通过名字取地图
					CString strMapName = pMaps->GetMapNameAt(0);
					
					if( pMaps->GetMap( strMapName,MapDef ) )
					{
						if(m_MapWnd.OpenMap(MapDef))
						{
							m_MapWnd.Refresh();
						}
					}
					
					//打开地图方法二: 通过序号取地图
				  /*if( pMaps->GetMapAt( 0, MapDef ) )
					{
						if(m_MapWnd.OpenMap(MapDef))
						{
							m_MapWnd.Refresh();
						}
					}*/
				}
			
				//没有默认地图,打开第一个数据源的第一个数据集作为当前地图
				else
				{
					CSeDataSource *pDataSource = theApp.m_WorkSpace.GetDataSourceAt( 0 );
					if( pDataSource && pDataSource->GetDatasetCount() > 0 )
					{
						CSeDataset *pDataset = pDataSource->GetDatasetAt( 0 );
						if( pDataset )
						{
							m_MapWnd.AddLayer( pDataset );
							m_MapWnd.Refresh();						
						}
					}		
				}
			}
			m_bFileOpened = true;	
		}
	}
}

void CMapOperationView::OnFileClose() 
{
	theApp.m_WorkSpace.Close();
	m_MapWnd.Close();
	m_bFileOpened = false;		
	m_MapWnd.Refresh();
}

void CMapOperationView::OnInitialUpdate() 
{
	//初始化视图窗口
	m_MapWnd.OnInitialUpdate( &theApp.m_WorkSpace, this );	
	CView::OnInitialUpdate();
}

//放大
void CMapOperationView::OnMapZoomin() 
{
	
	m_MapWnd.SetAction(CSeDrawParameters::uaZoomIn);
}

void CMapOperationView::OnUpdateMapZoomin(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(m_MapWnd.GetAction()==CSeDrawParameters::uaZoomIn );
	
}

//缩小
void CMapOperationView::OnMapZoomout() 
{
	m_MapWnd.SetAction(CSeDrawParameters::uaZoomOut);
}

void CMapOperationView::OnUpdateMapZoomout(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(m_MapWnd.GetAction()==CSeDrawParameters::uaZoomOut );
	
}

//自由缩放
void CMapOperationView::OnMapZoomfree() 
{
	m_MapWnd.SetAction( CSeDrawParameters::uaZoomFree );
}

void CMapOperationView::OnUpdateMapZoomfree(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(m_MapWnd.GetAction()==CSeDrawParameters::uaZoomFree );	
}

//光滑自由缩放
void CMapOperationView::OnMapSmoothZoomfree() 
{
	m_MapWnd.SetAction( CSeDrawParameters::uaSmoothZoomFree );	
}

void CMapOperationView::OnUpdateMapSmoothZoomfree(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(m_MapWnd.GetAction()==CSeDrawParameters::uaSmoothZoomFree );	
}	

//平移
void CMapOperationView::OnMapPan() 
{
	m_MapWnd.SetAction( CSeDrawParameters::uaPan );	
}

void CMapOperationView::OnUpdateMapPan(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(m_MapWnd.GetAction()==CSeDrawParameters::uaPan );
}

//光滑平移
void CMapOperationView::OnMapSmoothPan() 
{
	m_MapWnd.SetAction( CSeDrawParameters::uaSmoothPan );		
}

void CMapOperationView::OnUpdateMapSmoothPan(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(m_MapWnd.GetAction()==CSeDrawParameters::uaSmoothPan );
}

//点选
void CMapOperationView::OnMapPointSelect() 
{
	m_MapWnd.SetAction( CSeDrawParameters::uaPointModeSelect );		
}

void CMapOperationView::OnUpdateMapPointSelect(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(m_MapWnd.GetAction()==CSeDrawParameters::uaPointModeSelect );
}

//框选
void CMapOperationView::OnMapRectSelect() 
{
	m_MapWnd.SetAction( CSeDrawParameters::uaRectModeSelect );		
}

void CMapOperationView::OnUpdateMapRectSelect(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(m_MapWnd.GetAction()==CSeDrawParameters::uaRectModeSelect );
}

//整幅显示
void CMapOperationView::OnMapViewEntire() 
{
	m_MapWnd.ViewEntire();
}

//刷新
void CMapOperationView::OnMapRefresh() 
{
	m_MapWnd.Refresh();
}

//鼠标响应事件
void CMapOperationView::OnLButtonDown(UINT nFlags, CPoint point) 
{
	m_MapWnd.OnLButtonDown(nFlags, point);
	CView::OnLButtonDown(nFlags, point);
}

void CMapOperationView::OnLButtonUp(UINT nFlags, CPoint point) 
{
	m_MapWnd.OnLButtonUp(nFlags, point);
	CView::OnLButtonUp(nFlags, point);
}

void CMapOperationView::OnLButtonDblClk(UINT nFlags, CPoint point) 
{
	m_MapWnd.OnLButtonDblClk(nFlags, point);
	CView::OnLButtonDblClk(nFlags, point);
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -