📄 mapxmobileviewerview.cpp
字号:
// 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 + -