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

📄 mapxmobileviewerview.cpp

📁 mapx嵌入式插件
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// MapXMobileViewerView.cpp : implementation of the CMapXMobileViewerView class
//

#include "stdafx.h"
#include "MapXMobileViewer.h"

#include "MapXMobileViewerDoc.h"
#include "MapXMobileViewerView.h"
#include "SetInsertionLayerDlg.h"
#include "AddThemeDlg.h"
#include "BufferDlg.h"
#include "FindDlg.h"
#include "InfoToolDlg.h"
#include "ModifyThemeDlg.h"
#include "ViewEntireDlg.h"
#include "ZoomToDlg.h"

#define IDC_MAP 100
#define MY_INFOTOOL	1

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

#define ROUNDL( d ) ((long)((d) + ((d) > 0 ? 0.5 : -0.5)))

/////////////////////////////////////////////////////////////////////////////
// CMapXMobileViewerView

IMPLEMENT_DYNCREATE(CMapXMobileViewerView, CView)

BEGIN_MESSAGE_MAP(CMapXMobileViewerView, CView)
	//{{AFX_MSG_MAP(CMapXMobileViewerView)
	ON_WM_SETFOCUS()
	ON_WM_SIZE()
	ON_WM_CREATE()
	ON_COMMAND(ID_VIEW_LAYERCONTROL, OnViewLayercontrol)
	ON_UPDATE_COMMAND_UI(ID_VIEW_LAYERCONTROL, OnUpdateViewLayercontrol)
	ON_COMMAND(ID_TOOL_PAN, OnToolPan)
	ON_UPDATE_COMMAND_UI(ID_TOOL_PAN, OnUpdateToolPan)
	ON_COMMAND(ID_TOOL_ZOOMIN, OnToolZoomin)
	ON_UPDATE_COMMAND_UI(ID_TOOL_ZOOMIN, OnUpdateToolZoomin)
	ON_COMMAND(ID_TOOL_ZOOMOUT, OnToolZoomout)
	ON_UPDATE_COMMAND_UI(ID_TOOL_ZOOMOUT, OnUpdateToolZoomout)
	ON_COMMAND(ID_TOOL_SELECTPOINT, OnToolSelectpoint)
	ON_UPDATE_COMMAND_UI(ID_TOOL_SELECTPOINT, OnUpdateToolSelectpoint)
	ON_COMMAND(ID_TOOL_SELECTRADIUS, OnToolSelectradius)
	ON_UPDATE_COMMAND_UI(ID_TOOL_SELECTRADIUS, OnUpdateToolSelectradius)
	ON_COMMAND(ID_TOOL_CENTER, OnToolCenter)
	ON_UPDATE_COMMAND_UI(ID_TOOL_CENTER, OnUpdateToolCenter)
	ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
	ON_COMMAND(ID_MAP_VIEW_ENTIRE_LAYER, OnMapViewEntireLayer)
	ON_UPDATE_COMMAND_UI(ID_MAP_VIEW_ENTIRE_LAYER, OnUpdateMapViewEntireLayer)
	ON_COMMAND(ID_MAP_ZOOMTO, OnMapZoomto)
	ON_UPDATE_COMMAND_UI(ID_MAP_ZOOMTO, OnUpdateMapZoomto)
	ON_COMMAND(ID_MAP_CREATETEMPLAYER, OnMapCreatetemplayer)
	ON_COMMAND(ID_TOOL_ADDPOINT, OnToolAddpoint)
	ON_UPDATE_COMMAND_UI(ID_TOOL_ADDPOINT, OnUpdateToolAddpoint)
	ON_COMMAND(ID_TOOL_ADDPOLYGON, OnToolAddpolygon)
	ON_UPDATE_COMMAND_UI(ID_TOOL_ADDPOLYGON, OnUpdateToolAddpolygon)
	ON_COMMAND(ID_TOOL_ADDPOLYLINE, OnToolAddpolyline)
	ON_UPDATE_COMMAND_UI(ID_TOOL_ADDPOLYLINE, OnUpdateToolAddpolyline)
	ON_COMMAND(ID_MAP_CLOSEALLTABLES, OnMapClosealltables)
	ON_UPDATE_COMMAND_UI(ID_MAP_CLOSEALLTABLES, OnUpdateMapClosealltables)
	ON_UPDATE_COMMAND_UI(ID_MAP_CREATETEMPLAYER, OnUpdateMapCreatetemplayer)
	ON_COMMAND(ID_TOOLS_EDITOPTIONS_NEWOBJECTSTYLES, OnToolsEditoptionsNewobjectstyles)
	ON_COMMAND(ID_TOOLS_OBJECTEDITING_FEATUREEDITMODE, OnToolsObjecteditingFeatureeditmode)
	ON_UPDATE_COMMAND_UI(ID_TOOLS_OBJECTEDITING_FEATUREEDITMODE, OnUpdateToolsObjecteditingFeatureeditmode)
	ON_COMMAND(ID_TOOLS_OBJECTEDITING_NODEMODE, OnToolsObjecteditingNodemode)
	ON_UPDATE_COMMAND_UI(ID_TOOLS_OBJECTEDITING_NODEMODE, OnUpdateToolsObjecteditingNodemode)
	ON_COMMAND(ID_TOOLS_OBJECTEDITING_SETINSERTIONLAYER, OnToolsObjecteditingSetinsertionlayer)
	ON_UPDATE_COMMAND_UI(ID_TOOLS_OBJECTEDITING_SETINSERTIONLAYER, OnUpdateToolsObjecteditingSetinsertionlayer)
	ON_COMMAND(ID_TOOLS_SELECTIONS_BUFFERSELECTEDOBJECTS, OnToolsSelectionsBufferselectedobjects)
	ON_UPDATE_COMMAND_UI(ID_TOOLS_SELECTIONS_BUFFERSELECTEDOBJECTS, OnUpdateToolsSelectionsBufferselectedobjects)
	ON_COMMAND(ID_TOOLS_SELECTIONS_CLEARSELECTION, OnToolsSelectionsClearselection)
	ON_UPDATE_COMMAND_UI(ID_TOOLS_SELECTIONS_CLEARSELECTION, OnUpdateToolsSelectionsClearselection)
	ON_COMMAND(ID_TOOLS_SELECTIONS_DELETESELECTEDOBJECTS, OnToolsSelectionsDeleteselectedobjects)
	ON_UPDATE_COMMAND_UI(ID_TOOLS_SELECTIONS_DELETESELECTEDOBJECTS, OnUpdateToolsSelectionsDeleteselectedobjects)
	ON_COMMAND(ID_TOOLS_SELECTIONS_POLYGONSELECTTOOL, OnToolsSelectionsPolygonselecttool)
	ON_UPDATE_COMMAND_UI(ID_TOOLS_SELECTIONS_POLYGONSELECTTOOL, OnUpdateToolsSelectionsPolygonselecttool)
	ON_COMMAND(ID_TOOLS_SELECTIONS_RECTSELECTTOOL, OnToolsSelectionsRectselecttool)
	ON_UPDATE_COMMAND_UI(ID_TOOLS_SELECTIONS_RECTSELECTTOOL, OnUpdateToolsSelectionsRectselecttool)
	ON_COMMAND(ID_TOOLS_SELECTIONS_SETOBJECTSTYLES, OnToolsSelectionsSetobjectstyles)
	ON_UPDATE_COMMAND_UI(ID_TOOLS_SELECTIONS_SETOBJECTSTYLES, OnUpdateToolsSelectionsSetobjectstyles)
	ON_COMMAND(ID_TOOLS_OBJECTEDITING_ADDNODEMODE, OnToolsObjecteditingAddnodemode)
	ON_UPDATE_COMMAND_UI(ID_TOOLS_OBJECTEDITING_ADDNODEMODE, OnUpdateToolsObjecteditingAddnodemode)
	ON_COMMAND(IDC_TOOLBAR_INFO, OnToolbarInfo)
	ON_UPDATE_COMMAND_UI(IDC_TOOLBAR_INFO, OnUpdateToolbarInfo)
	ON_COMMAND(ID_VIEW_FIND, OnViewFind)
	ON_UPDATE_COMMAND_UI(ID_VIEW_FIND, OnUpdateViewFind)
	ON_COMMAND(ID_VIEW_PROJECTION, OnViewProjection)
	ON_COMMAND(ID_MAP_EXPORTMAP, OnMapExportmap)
	ON_COMMAND(ID_TOOLS_MORETOOLS, OnToolsMoretools)
	ON_COMMAND(ID_TOOLS_ARROW, OnToolsArrow)
	ON_UPDATE_COMMAND_UI(ID_TOOLS_ARROW, OnUpdateToolsArrow)
	ON_COMMAND(ID_MAP_CREATETHEME, OnMapCreatetheme)
	ON_UPDATE_COMMAND_UI(ID_MAP_CREATETHEME, OnUpdateMapCreatetheme)
	ON_COMMAND(ID_MAP_MODIFYTHEME, OnMapModifytheme)
	ON_COMMAND(ID_Open, OnOpen)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

BEGIN_EVENTSINK_MAP(CMapXMobileViewerView, CView)
	ON_EVENT(CMapXMobileViewerView, IDC_MAP, MAPX_DISPID_TOOLUSED, OnToolUsed, VTS_I2 VTS_R8 VTS_R8 VTS_R8 VTS_R8 VTS_R8 VTS_BOOL VTS_BOOL VTS_PVARIANT)
	ON_EVENT(CMapXMobileViewerView, IDC_MAP, MAPX_DISPID_THEMEMODIFYREQUESTED, OnThemeModifyRequested, VTS_DISPATCH)
END_EVENTSINK_MAP()


/////////////////////////////////////////////////////////////////////////////
// CMapXMobileViewerView construction/destruction

CMapXMobileViewerView::CMapXMobileViewerView()
{
}

CMapXMobileViewerView::~CMapXMobileViewerView()
{
}

BOOL CMapXMobileViewerView::PreCreateWindow(CREATESTRUCT& cs)
{
	return CView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CMapXMobileViewerView drawing

void CMapXMobileViewerView::OnDraw(CDC* pDC)
{
	CMapXMobileViewerDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
}

/////////////////////////////////////////////////////////////////////////////
// CMapXMobileViewerView diagnostics

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

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

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

/////////////////////////////////////////////////////////////////////////////
// CMapXMobileViewerView message handlers

void CMapXMobileViewerView::OnSetFocus(CWnd* pOldWnd) 
{
	CView::OnSetFocus(pOldWnd);
	
	m_ctrlMapX.SetFocus();
	
}

void CMapXMobileViewerView::OnSize(UINT nType, int cx, int cy) 
{
	CView::OnSize(nType, cx, cy);
	
	if (cx != 0 && cy != 0) {
		m_ctrlMapX.MoveWindow(0,0,cx,cy,TRUE);
	}
	
}

/*
	This is where we create the mapx mobile control
*/

int CMapXMobileViewerView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CView::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	// TODO: Add your specialized creation code here
	TRY {
		// create map with default size - resize message will cause it to be
		// sized to the client area of the view
		// pass a license key so the .lic file is not needed
		// this key allows SW access and themes, etc
		CString strLic = _T("uQnZi2sFw22L0-MRa8pYX-1E4P9013-5N7M4407-3C934214-04969-5285");
		BSTR bstrLic = strLic.AllocSysString();
		BOOL b = m_ctrlMapX.Create(NULL, WS_VISIBLE, CRect(0,0,100,100), this, IDC_MAP, NULL, FALSE, bstrLic);
		::SysFreeString(bstrLic);

		if (!b) { 
			b = m_ctrlMapX.Create(NULL, WS_VISIBLE, CRect(0,0,100,100), this, 100, NULL, FALSE, NULL);
		}

		if (!b) {
			AfxMessageBox(_T("Can't Create MapX"));
			return FALSE;
		}

		m_ctrlMapX.GetTitle().SetVisible(FALSE);
		m_ctrlMapX.SetCurrentTool(miZoomInTool);
		m_ctrlMapX.CreateCustomTool(MY_INFOTOOL, miToolTypePoint, miInfoCursor); // cursor can't be seen on pocketpc
		m_ctrlMapX.SetPreferCompactLegends(TRUE);

	}
	CATCH (COleDispatchException,e) {
		e->ReportError();
		//e->Delete();
	}
	AND_CATCH (COleException,e) {
		e->ReportError();
		//e->Delete();
	}
  END_CATCH

	
	return 0;
}

void CMapXMobileViewerView::OnViewLayercontrol() 
{
	m_ctrlMapX.GetLayers().LayersDlg();
}

void CMapXMobileViewerView::OnUpdateViewLayercontrol(CCmdUI* pCmdUI) 
{
}

void CMapXMobileViewerView::OnToolPan() 
{
	m_ctrlMapX.SetCurrentTool(miPanTool);
}

void CMapXMobileViewerView::OnUpdateToolPan(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(m_ctrlMapX.GetCurrentTool() == miPanTool);
}

void CMapXMobileViewerView::OnToolZoomin() 
{
	m_ctrlMapX.SetCurrentTool(miZoomInTool);
}

void CMapXMobileViewerView::OnUpdateToolZoomin(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(m_ctrlMapX.GetCurrentTool() == miZoomInTool);
}

void CMapXMobileViewerView::OnToolZoomout() 
{
	m_ctrlMapX.SetCurrentTool(miZoomOutTool);
}

void CMapXMobileViewerView::OnUpdateToolZoomout(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(m_ctrlMapX.GetCurrentTool() == miZoomOutTool);
	
}

void CMapXMobileViewerView::OnToolSelectpoint() 
{
	m_ctrlMapX.SetCurrentTool(miSelectTool);
}

void CMapXMobileViewerView::OnUpdateToolSelectpoint(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(m_ctrlMapX.GetCurrentTool() == miSelectTool);
	
}

void CMapXMobileViewerView::OnToolSelectradius() 
{
	m_ctrlMapX.SetCurrentTool(miRadiusSelectTool);
}

void CMapXMobileViewerView::OnUpdateToolSelectradius(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(m_ctrlMapX.GetCurrentTool() == miRadiusSelectTool);
	
}

void CMapXMobileViewerView::OnToolCenter() 
{
	m_ctrlMapX.SetCurrentTool(miCenterTool);
}

void CMapXMobileViewerView::OnUpdateToolCenter(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(m_ctrlMapX.GetCurrentTool() == miCenterTool);
}

// these should be in the string table so the descriptions can be localized
static TCHAR BASED_CODE szFilterBasic[] = _T("MapInfo Tables (*.tab)|*.tab|Geoset Files (*.gst)|*.gst|GeoTiff Files (*.tif)|*.tif|All Files (*.*)|*.*|");
static TCHAR BASED_CODE szFilterBmp[] = _T("Bitmap Files|*.bmp|All Files (*.*)|*.*|");


void CMapXMobileViewerView::OnFileOpen() 
{
	TCHAR szFilter[2048];
	_tcsncpy(szFilter, szFilterBasic, sizeof(szFilter)/sizeof(TCHAR));

	_tcscat(szFilter, _T("|"));

	CFileDialog dlgFile(TRUE, _T("gst"), NULL, 0, szFilter, this);
	dlgFile.m_ofn.lpstrTitle = _T("Open");
	TCHAR buf[_MAX_PATH]=_T("\\");

	dlgFile.m_ofn.lpstrInitialDir = buf;

	if (dlgFile.DoModal() == IDCANCEL)
		return;

	// code was written to handle multiple files selected, but CE only returns one at a time
	POSITION pos = dlgFile.GetStartPosition();
	CString strFile;
	while (pos) {
		strFile = dlgFile.GetNextPathName(pos);
		if (strFile.Right(3).CompareNoCase(_T("gst"))==0) {
			m_ctrlMapX.SetGeoSet(strFile);
			// loop through layers and add layer dataset if normal layer and no datasets on layer
			TRY {
				int n = m_ctrlMapX.GetLayers().GetCount();

				for (int i=1; i <= n; i++) {
					CMapXLayer layer = m_ctrlMapX.GetLayers().Item(i);
					

					switch (layer.GetType()) {
					case miLayerTypeNormal: {
						if (layer.GetDatasets().GetCount() > 0) continue;
						// set better dataset name
						// and add layer dataset. Can be used for labelling/themese/etc
						CString str = layer.GetName();
						str += _T("_Dataset");
						COleVariantDispatch vLayer(layer);
						m_ctrlMapX.GetDatasets().Add(miDataSetLayer, vLayer, str);
						break;
						}
					case miLayerTypeRaster:
					case miLayerTypeSeamless:
					case miLayerTypeUnknown:
					case miLayerTypeUserDraw:
					case miLayerTypeDrilldown:
						break;
					}
				}
			}
			CATCH (COleDispatchException, e) {
				e->ReportError();
				e->Delete();
				continue;
			}
			AND_CATCH (COleException, e) {
				e->ReportError();
				e->Delete();
				continue;
			}
			END_CATCH
		}
		else if (strFile.Right(3).CompareNoCase(_T("tab"))==0) {
			TRY {
				//m_ctrlMapX.GetLayers().Add(strFile); // simple add
				// show how to Add with layer dataset
				// but instead we will add a dataset after the layer is added
				// as long as it is a normal layer
				CMapXLayerInfo li;
				COleVariant vFile(strFile);
				COleVariant vAutoCreate(1L);
				li.CreateDispatch(li.GetClsid());
				li.SetType(miLayerInfoTypeTab);
				li.AddParameter(_T("FileSpec"), vFile);
				// do this if you want to add a dataset with the layer
				//li.AddParameter(_T("AutoCreateDataset"), vAutoCreate);
				CMapXLayer l = m_ctrlMapX.GetLayers().Add(li);

				// Add a layer dataset if layer added is a normal layer
				switch (l.GetType()) {
				case miLayerTypeNormal: {
					// set better dataset name
					// and add layer dataset. Can be used for labelling/themese/etc
					CString str = l.GetName();
					str += _T("_Dataset");
					COleVariantDispatch vLayer(l);
					m_ctrlMapX.GetDatasets().Add(miDataSetLayer, vLayer, str);
					break;
					}
				case miLayerTypeRaster:
				case miLayerTypeSeamless:
				case miLayerTypeUnknown:
				case miLayerTypeUserDraw:
				case miLayerTypeDrilldown:
					break;
				}
			}
			CATCH (COleDispatchException,e) {
				e->ReportError();
				//e->Delete();
			}
			AND_CATCH (COleException,e) {
				e->ReportError();
				//e->Delete();
			}
			END_CATCH
		}
		else {
			TRY {
				// not tab or geoset, but lets try to add it anyway, it might be a self registering raster image
				CMapXLayerInfo li;
				COleVariant vFile(strFile);
				li.CreateDispatch(li.GetClsid());
				li.SetType(miLayerInfoTypeRaster);
				li.AddParameter(_T("FileSpec"), vFile);
				CMapXLayer l = m_ctrlMapX.GetLayers().Add(li);
			}
			CATCH (COleDispatchException,e) {
				e->ReportError();
				//e->Delete();
			}
			AND_CATCH (COleException,e) {
				e->ReportError();
				//e->Delete();
			}
			END_CATCH
		}
	}
}

void CMapXMobileViewerView::OnMapViewEntireLayer() 
{
	CViewEntireDlg dlg(this);
	dlg.m_pMap = GetMap();
	if (dlg.DoModal() == IDCANCEL) {
		return;
	}
	TRY {
		if (dlg.GetLayerIndex() == 0) {
			m_ctrlMapX.SetBounds(m_ctrlMapX.GetLayers().GetClippedBounds());
		}
		else {
			m_ctrlMapX.SetBounds(m_ctrlMapX.GetLayers().Item(dlg.GetLayerIndex()).GetClippedBounds());
		}
	}
	CATCH (COleDispatchException,e) {
		//e->Delete();
	}
	AND_CATCH (COleException,e) {
		//e->Delete();
	}
  END_CATCH
}

void CMapXMobileViewerView::OnUpdateMapViewEntireLayer(CCmdUI* pCmdUI) 
{
	BOOL b=FALSE;
	TRY {
		if (m_ctrlMapX.GetLayers().GetCount() > 0) {
			b = TRUE;
		}
	}
	CATCH (COleDispatchException,e) {
		//e->Delete();
	}
	AND_CATCH (COleException,e) {
		//e->Delete();
	}
  END_CATCH
	pCmdUI->Enable(b);
}

void CMapXMobileViewerView::OnMapZoomto() 
{
	CZoomToDlg dlg;
	double dZoom, dX, dY;
	TRY {
		dZoom = m_ctrlMapX.GetZoom();
		dX = m_ctrlMapX.GetCenterX();
		dY = m_ctrlMapX.GetCenterY();
		dlg.m_zoom = dZoom;
		dlg.m_x = dX;
		dlg.m_y = dY;
		dlg.m_pMap = &m_ctrlMapX;

		dlg.DoModal();
	}
	CATCH (COleDispatchException,e) {
		e->ReportError();
		//e->Delete();
	}
	AND_CATCH (COleException,e) {
		e->ReportError();
		//e->Delete();
	}
  END_CATCH
}

void CMapXMobileViewerView::OnUpdateMapZoomto(CCmdUI* pCmdUI) 
{
	BOOL b=FALSE;
	TRY {
		if (m_ctrlMapX.GetLayers().GetCount() > 0) {
			b = TRUE;
		}
	}
	CATCH (COleDispatchException,e) {
		//e->Delete();
	}
	AND_CATCH (COleException,e) {
		//e->Delete();
	}
  END_CATCH
	pCmdUI->Enable(b);
}

void CMapXMobileViewerView::OnMapCreatetemplayer() 
{
	TRY {
		CMapXLayer l = m_ctrlMapX.GetLayers().CreateLayer(_T("Scratch Layer"), NULL, 1);
		l.SetEditable(TRUE);
		m_ctrlMapX.GetLayers().SetInsertionLayer(l);
	}
	CATCH (COleDispatchException,e) {
		//e->Delete();
	}
	AND_CATCH (COleException,e) {
		//e->Delete();
	}
  END_CATCH
}

void CMapXMobileViewerView::OnToolAddpoint() 
{
	m_ctrlMapX.SetCurrentTool(miAddPointTool);
}

void CMapXMobileViewerView::OnUpdateToolAddpoint(CCmdUI* pCmdUI) 
{
	TRY {
		CMapXLayer lyrInsertion = m_ctrlMapX.GetLayers().GetInsertionLayer();
		pCmdUI->Enable(lyrInsertion.m_lpDispatch!=NULL);
		pCmdUI->SetCheck(m_ctrlMapX.GetCurrentTool() == miAddPointTool);
	}
	CATCH (COleDispatchException,e) {
		//e->Delete();
	}
	AND_CATCH (COleException,e) {
		e->ReportError();
		//e->Delete();
	}
	END_CATCH
}

void CMapXMobileViewerView::OnToolAddpolygon() 
{

⌨️ 快捷键说明

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