📄 mapoperationview.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 + -