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

📄 eyemap1.cpp

📁 一个简单的Sample程序
💻 CPP
字号:
// EyeMap1.cpp : implementation file
//

#include "stdafx.h"
#include "MapNavigate.h"
#include "EyeMap1.h"

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

/////////////////////////////////////////////////////////////////////////////
// CEyeMap dialog


CEyeMap::CEyeMap(CWnd* pParent /*=NULL*/)
	: CDialog(CEyeMap::IDD, pParent)
{
	//{{AFX_DATA_INIT(CEyeMap)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
}


void CEyeMap::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CEyeMap)
		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CEyeMap, CDialog)
	//{{AFX_MSG_MAP(CEyeMap)
	ON_COMMAND(ID_TRACE, OnTrace)
	ON_COMMAND(ID_ZOOMINOUT, OnZoominout)
	ON_COMMAND(ID_EYEBACKGROUND, OnEyebackground)
	ON_WM_CLOSE()
	ON_WM_SIZE()
	ON_MESSAGE(WM_MAPCHANGING,OnChangEye)
	ON_WM_CREATE()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

BEGIN_EVENTSINK_MAP(CEyeMap, CDialog)
	ON_EVENT(CEyeMap, 112, 3 /* ToolUsed */, OnToolUsedMap, VTS_I2 VTS_R8 VTS_R8 VTS_R8 VTS_R8 VTS_R8 VTS_BOOL VTS_BOOL VTS_PBOOL)
	ON_EVENT(CEyeMap, 112, -606 /* MouseMove */, OnMouseMoveMap, VTS_I2 VTS_I2 VTS_R4 VTS_R4)
	ON_EVENT(CEyeMap, 112, -605 /* MouseDown */, OnMouseDownMap, VTS_I2 VTS_I2 VTS_R4 VTS_R4)
//	ON_EVENT(CEyeMap, 101, -607 /* MouseUp */, OnMouseUpMap1, VTS_I2 VTS_I2 VTS_R4 VTS_R4)
	//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()

/////////////////////////////////////////////////////////////////////////////
// CEyeMap message handlers

void CEyeMap::OnTrace() 
{
	// TODO: Add your command handler code here
	currentoper = 0;
	EyeMap.SetCurrentTool(1000);
	EyeMap.SetMousePointer(miCrossCursor);
}

void CEyeMap::OnZoominout() 
{
	// TODO: Add your command handler code here
	currentoper = 1;
	EyeMap.CreateCustomTool(100,miToolTypeMarquee,miRectSelectCursor);
	EyeMap.SetCurrentTool(100);
	EyeMap.SetMousePointer(miRectSelectCursor);
}

void CEyeMap::OnEyebackground() 
{
	// TODO: Add your command handler code here
	long color = EyeMap.GetBackColor();
	CColorDialog dlg(color);
	if(dlg.DoModal()==IDOK)
	{
		long setcolor = dlg.GetColor();
		EyeMap.SetBackColor(setcolor);
		m_backcolor = setcolor;
	}
}

BOOL CEyeMap::Create()
{
	return CDialog::Create(CEyeMap::IDD);
}

void CEyeMap::Init()
{
	EyeMap.SetMousePointer(miCrossCursor);
	CMapXLayer lyr = EyeMap.GetLayers().Item("pan");
	long count = lyr.AllFeatures().GetCount();
	for(int i=1;i<=count;i++)
	{
		lyr.DeleteFeature(lyr.AllFeatures().Item(i));
	}
	CMapXRectangle rec;
	rec = map->GetBounds();
	double x1 = rec.GetXMin();
	double y1 = rec.GetYMax();
	double x2 = rec.GetXMax();
	double y2 = rec.GetYMin();
	width = x2-x1;
	height = y1-y2;
	CMapXPoints points;
	CMapXPoint point;
	points.CreateDispatch(points.GetClsid());
	point.CreateDispatch(point.GetClsid());
	point.Set(x1,y1);
	points.Add(point);
	point.Set(x2,y1);
	points.Add(point);
	point.Set(x2,y2);
	points.Add(point);
	point.Set(x1,y2);
	points.Add(point);
	VARIANT v;
	v.vt = VT_DISPATCH;
	v.pdispVal = points.m_lpDispatch;
	v.pdispVal->AddRef();
	CMapXStyle sty;
	sty.CreateDispatch(sty.GetClsid());
	sty.SetRegionBorderWidth(3);
	sty.SetRegionBorderColor(RGB(39,216,57));
	sty.SetRegionPattern(miPatternNoFill);
	sty.SetRegionTransparent(1);
	VARIANT t;
	t.vt = VT_DISPATCH;
	t.pdispVal = sty.m_lpDispatch;
	t.pdispVal->AddRef();
	CMapXFeature ftr;
	ftr = EyeMap.GetFeatureFactory().CreateRegion(v,t);
	lyr.AddFeature(ftr);
}

LRESULT CEyeMap::OnChangEye(WPARAM wParam,LPARAM lParam)
{
	CMapXLayer lyr = EyeMap.GetLayers().Item("pan");
	long count = lyr.AllFeatures().GetCount();
	for(int i=1;i<=count;i++)
	{
		lyr.DeleteFeature(lyr.AllFeatures().Item(i));
	}
	CMapXRectangle rec;
	rec = map->GetBounds();
	double x1 = rec.GetXMin();
	double y1 = rec.GetYMax();
	double x2 = rec.GetXMax();
	double y2 = rec.GetYMin();
	width = x2-x1;
	height = y1-y2;
	CMapXPoints points;
	CMapXPoint point;
	points.CreateDispatch(points.GetClsid());
	point.CreateDispatch(point.GetClsid());
	point.Set(x1,y1);
	points.Add(point);
	point.Set(x2,y1);
	points.Add(point);
	point.Set(x2,y2);
	points.Add(point);
	point.Set(x1,y2);
	points.Add(point);
	VARIANT v;
	v.vt = VT_DISPATCH;
	v.pdispVal = points.m_lpDispatch;
	v.pdispVal->AddRef();
	CMapXStyle sty;
	sty.CreateDispatch(sty.GetClsid());
	sty.SetRegionBorderWidth(2);
	sty.SetRegionBorderColor(RGB(39,216,57));
	sty.SetRegionPattern(miPatternNoFill);
	sty.SetRegionTransparent(1);
	VARIANT t;
	t.vt = VT_DISPATCH;
	t.pdispVal = sty.m_lpDispatch;
	t.pdispVal->AddRef();
	CMapXFeature ftr;
	ftr = EyeMap.GetFeatureFactory().CreateRegion(v,t);
	lyr.AddFeature(ftr);
	return 0L;
}

void CEyeMap::OnToolUsedMap(short ToolNum, double X1, double Y1, double X2, double Y2, double Distance, BOOL Shift, BOOL Ctrl, BOOL FAR* EnableDefault) 
{
	// TODO: Add your control notification handler code here
	if(ToolNum==100)
	{
		CMapXLayer lyr = EyeMap.GetLayers().Item("pan");
		long count = lyr.AllFeatures().GetCount();
		for(int i=1;i<=count;i++)
		{
			lyr.DeleteFeature(lyr.AllFeatures().Item(i));
		}
		width = X2-X1;
		height = Y1-Y2;
		CMapXPoints points;
		CMapXPoint point;
		points.CreateDispatch(points.GetClsid());
		point.CreateDispatch(point.GetClsid());
		point.Set(X1,Y1);
		points.Add(point);
		point.Set(X2,Y1);
		points.Add(point);
		point.Set(X2,Y2);
		points.Add(point);
		point.Set(X1,Y2);
		points.Add(point);
		VARIANT v;
		v.vt = VT_DISPATCH;
		v.pdispVal = points.m_lpDispatch;
		v.pdispVal->AddRef();
		CMapXStyle sty;
		sty.CreateDispatch(sty.GetClsid());
		sty.SetRegionBorderWidth(3);
		sty.SetRegionPattern(miPatternNoFill);
		sty.SetRegionBorderColor(RGB(39,216,57));
		sty.SetRegionTransparent(1);
		VARIANT t;
		t.vt = VT_DISPATCH;
		t.pdispVal = sty.m_lpDispatch;
		t.pdispVal->AddRef();
		CMapXFeature ftr;
		ftr = EyeMap.GetFeatureFactory().CreateRegion(v,t);
		lyr.AddFeature(ftr);
		CMapXRectangle rec;
		rec.CreateDispatch(rec.GetClsid());
		rec.Set(X1,Y1,X2,Y2);
		map->SetBounds(rec);		
	}
}

void CEyeMap::InitMap(CMapX *pMap)
{
	map = pMap;
}
void CEyeMap::OnMouseDownMap(short Button, short Shift, float X, float Y) 
{
	// TODO: Add your control notification handler code here
		currentoper=1;		
		CMapXLayer lyr = EyeMap.GetLayers().Item("pan");
		long count = lyr.AllFeatures().GetCount();
		for(int i=1;i<=count;i++)
		{
			lyr.DeleteFeature(lyr.AllFeatures().Item(i));
		}	
		float screenX,screenY;
		double x,y;
		screenX = X;
		screenY = Y;
		EyeMap.ConvertCoord(&screenX,&screenY,&x,&y,1);
		CMapXPoints points;
		CMapXPoint point;
		points.CreateDispatch(points.GetClsid());
		point.CreateDispatch(point.GetClsid());
		point.Set(x-width/2,y+height/2);
		points.Add(point);
		point.Set(x+width/2,y+height/2);
		points.Add(point);
		point.Set(x+width/2,y-height/2);
		points.Add(point);
		point.Set(x-width/2,y-height/2);
		points.Add(point);
		VARIANT v;
		v.vt = VT_DISPATCH;
		v.pdispVal = points.m_lpDispatch;
		v.pdispVal->AddRef();
		CMapXStyle sty;
		sty.CreateDispatch(sty.GetClsid());
		sty.SetRegionBorderWidth(3);
		sty.SetRegionBorderColor(RGB(39,216,57));
		sty.SetRegionPattern(miPatternNoFill);
		sty.SetRegionTransparent(1);
		VARIANT t;
		t.vt = VT_DISPATCH;
		t.pdispVal = sty.m_lpDispatch;
		t.pdispVal->AddRef();
		CMapXFeature ftr;
		ftr = EyeMap.GetFeatureFactory().CreateRegion(v,t);
		lyr.AddFeature(ftr);
		CMapXRectangle rec;
		rec.CreateDispatch(rec.GetClsid());
		rec.Set(x-width/2,y+height/2,x+width/2,y-height/2);
		map->SetBounds(rec);	
}

void CEyeMap::OnMouseMoveMap(short Button, short Shift, float X, float Y) 
{
	// TODO: Add your control notification handler code here
	if(currentoper==0)
	{
		CMapXLayer lyr = EyeMap.GetLayers().Item("pan");
		long count = lyr.AllFeatures().GetCount();
		for(int i=1;i<=count;i++)
		{
			lyr.DeleteFeature(lyr.AllFeatures().Item(i));
		}
		float screenX,screenY;
		double x,y;
		screenX = X;
		screenY = Y;
		EyeMap.ConvertCoord(&screenX,&screenY,&x,&y,1);
		CMapXPoints points;
		CMapXPoint point;
		points.CreateDispatch(points.GetClsid());
		point.CreateDispatch(point.GetClsid());
		point.Set(x-width/2,y+height/2);
		points.Add(point);
		point.Set(x+width/2,y+height/2);
		points.Add(point);
		point.Set(x+width/2,y-height/2);
		points.Add(point);
		point.Set(x-width/2,y-height/2);
		points.Add(point);
		VARIANT v;
		v.vt = VT_DISPATCH;
		v.pdispVal = points.m_lpDispatch;
		v.pdispVal->AddRef();
		CMapXStyle sty;
		sty.CreateDispatch(sty.GetClsid());
		sty.SetRegionBorderWidth(3);
		sty.SetRegionBorderColor(RGB(39,216,57));
		sty.SetRegionPattern(miPatternNoFill);
		sty.SetRegionTransparent(1);
		VARIANT t;
		t.vt = VT_DISPATCH;
		t.pdispVal = sty.m_lpDispatch;
		t.pdispVal->AddRef();
		CMapXFeature ftr;
		ftr = EyeMap.GetFeatureFactory().CreateRegion(v,t);
		lyr.AddFeature(ftr);
		CMapXRectangle rec;
		rec.CreateDispatch(rec.GetClsid());
		rec.Set(x-width/2,y+height/2,x+width/2,y-height/2);
		map->SetBounds(rec);
	}
	
}

void CEyeMap::OnClose() 
{
	// TODO: Add your message handler code here and/or call default
	if(pView!=NULL)
		this->DestroyWindow();
	CDialog::OnClose();
}

void CEyeMap::OnSize(UINT nType, int cx, int cy) 
{
	CDialog::OnSize(nType, cx, cy);
	EyeMap.MoveWindow(0,0,cx,cy);
	// TODO: Add your message handler code here
	
}

BOOL CEyeMap::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	Init();
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

int CEyeMap::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CDialog::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	// TODO: Add your specialized creation code here
	if(EyeMap.Create(NULL,WS_VISIBLE,CRect(0,0,0,0),this,112))
	{
		EyeMap.SetGeoSet("");
		int i=0;
		while(strMap[i]!="-1")
		{
			EyeMap.GetLayers().Add(strMap[i]);
			i++;
		}
		EyeMap.SetBackColor(m_backcolor);
		EyeMap.SetInfotipSupport(0);
		EyeMap.SetBounds(EyeMap.GetLayers().GetBounds());
		EyeMap.GetTitle().SetVisible(0);
		COleVariant sd;
		CMapXLayer layer;
		CMapXDataset ds;
		layer = EyeMap.GetLayers().Item(1);
		sd.vt = VT_DISPATCH;
		sd.pdispVal = layer.m_lpDispatch;
		sd.pdispVal->AddRef();
		ds = EyeMap.GetDatasets().Add(miDataSetLayer,sd,EyeMap.GetLayers().Item(1).GetName());
		CMapXLayerInfo lyrinfo;
		lyrinfo.CreateDispatch(lyrinfo.GetClsid());
		lyrinfo.SetType(miLayerInfoTypeTemp);
		VARIANT vlayername;
		vlayername.vt = VT_BSTR;
		vlayername.bstrVal = CString("pan").AllocSysString();
		lyrinfo.AddParameter("Name",vlayername);
		VARIANT m_Fields;
		CMapXFields n_Fields; 
		n_Fields.CreateDispatch(n_Fields.GetClsid()); 
		n_Fields=ds.GetFields(); 
		m_Fields.vt = VT_DISPATCH; 
		m_Fields.pdispVal = n_Fields.m_lpDispatch;
		m_Fields.pdispVal->AddRef();
		lyrinfo.AddParameter("Fields", m_Fields);
		VARIANT vName;
		vName.vt = VT_BSTR;
		vName.bstrVal = CString("MemTable").AllocSysString();
		lyrinfo.AddParameter("TableStorageType",vName);
		EyeMap.GetLayers().Add(lyrinfo.m_lpDispatch);
	}
	return 0;
}

⌨️ 快捷键说明

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