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

📄 mo20view.cpp

📁 电子地图的代码 实现一些空间功能 比如说放大 缩小等 是以美国为例
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	
}

void CMO20View::OnSize(UINT nType, int cx, int cy) 
{
	CFormView::OnSize(nType, cx, cy);
	
	// TODO: Add your message handler code here

	  //        if (m_map.m_hWnd)
//	m_map.SetWindowPos(0, 0, 0, cx, cy, SWP_NOZORDER);
		if(m_map.m_hWnd)
		{//SetRedraw(false);
	m_map.SetWindowPos(&wndBottom, 0, 0, cx, cy, SWP_SHOWWINDOW);

	m_map1.SetWindowPos(&wndTop, 0, 0, cx, cy, SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOMOVE);

	//SetRedraw(true);
	//Invalidate();	
		}
	
}

/*Void CMO20View::OnMapSearch()
{
// Build a search expression from the text in IDC_SEARCHEDIT
	CMainFrame* pMainFrame = (CMainFrame*)AfxGetMainWnd();
	ASSERT_VALID(pMainFrame);
	CString searchText = pMainFrame->GetSearchText();
//1.从应用程序的工具条中获得文本框中的文字
//2.接下来建立查询语句
	CString expression;
	expression.Format("(State_name Like '%%%s%%')", searchText);	

	CMoLayers	layers(m_map.GetLayers());
CMoMapLayer	states(layers.Item(COleVariant(TEXT("STATES"))));
CMoRecordset  recs(states.SearchExpression(expression));

if (recs.GetEof())
	::MessageBeep(MB_ICONQUESTION);
else
{
	CMoFields fields(recs.GetFields());
	CMoField  shapeField(fields.Item(COleVariant(TEXT("Shape"))));
	CMoPolygon shape(shapeField.GetValue().pdispVal);
	CMoRectangle r(shape.GetExtent());
	r.ScaleRectangle(2);
	m_map.SetExtent(r);	// zoom to the state
	m_map.Refresh();	// force redraw
	m_map.FlashShape(shape, 3);
}

}*/

void CMO20View::OnMapSearch()
{
	// Build a search expression from the text in IDC_SEARCHEDIT
	CMainFrame* pMainFrame = (CMainFrame*)AfxGetMainWnd();
	ASSERT_VALID(pMainFrame);
	CString searchText = pMainFrame->GetSearchText();
//1.从应用程序的工具条中获得文本框中的文字
//2.接下来建立查询语句
	CString expression;
	expression.Format("(CITY_NAME Like '%%%s%%')", searchText);	

	CMoLayers	layers(m_map.GetLayers());
CMoMapLayer	capitalLayer(layers.Item(COleVariant(TEXT("CAPITALS"))));
CMoRecordset  cityRecs(capitalLayer.SearchExpression(expression));

if (cityRecs.GetEof())
	::MessageBeep(MB_ICONQUESTION);
else
{
	/*CMoFields fields(cityRecs.GetFields());
	CMoField  shapeField(fields.Item(COleVariant(TEXT("Shape"))));
	CMoPolygon shape(shapeField.GetValue().pdispVal);
	CMoRectangle r(shape.GetExtent());
	r.ScaleRectangle(2);
	m_map.SetExtent(r);	// zoom to the state
	m_map.Refresh();	// force redraw
	m_map.FlashShape(shape, 3);*/
		CMoFields fields(cityRecs.GetFields());
	CMoField  shapeField(fields.Item(COleVariant(TEXT("Shape"))));
	CMoPoint shape(shapeField.GetValue().pdispVal);
	CMoMapLayer statesLayer(layers.Item(COleVariant(TEXT("STATES"))));
	CMoRecordset stateRecs(statesLayer.SearchShape(shape,moPointInPolygon,""));
	if(!stateRecs.GetEof())
	{
		CMoFields stateFields(stateRecs.GetFields());
		CMoField stateField(stateFields.Item(COleVariant(TEXT("Shape"))));
		CMoPolygon shape1(stateField.GetValue().pdispVal);
		CMoRectangle r(shape1.GetExtent());
		r.ScaleRectangle(2);
		m_map.SetExtent(r);	// zoom to the state
		m_map.Refresh();	// force redraw
		m_map.FlashShape(shape1, 3);
	}
}

//	CMainFrame* pMainFrame = (CMainFrame*)AfxGetMainWnd();
//ASSERT_VALID(pMainFrame);
// Set up states renderer




}

void CMO20View::OnBeforeLayerDrawMap1(short index, long hDC) 
{
	// TODO: Add your control notification handler code here

	CMoRectangle extent(m_map.GetExtent());
CMoRectangle fullExtent(m_map.GetFullExtent());
BOOL showDetail =  (extent.GetWidth() < (fullExtent.GetWidth() / 4.0)); 
// Set layer visibility
CMoLayers   layers(m_map.GetLayers());
CMoMapLayer layer(layers.Item(COleVariant(index)));	

switch (index)	{	
	case 1: layer.SetVisible(showDetail);	
		break;                // counties
	case 2: layer.SetVisible(!showDetail);
		break;                // states
}

	
}

void CMO20View::OnButton32776() 
{
	// TODO: Add your command handler code here
	f1=0;
	f2=0;
	f3=0;
	f4=0;
	f5=1;
	
}

void CMO20View::OnAfterTrackingLayerDrawMap1(long hDC) 
{
	// TODO: Add your control notification handler code here
	if (LPDISPATCH(m_selection) == 0)
	return;		// No selection to draw
CMoSymbol sym;
sym.CreateDispatch(TEXT("MapObjects2.Symbol"));
sym.SetColor(moCrossFill);
sym.SetSymbolType(moFillSymbol); sym.SetStyle(moLightGrayFill);//experiment with different fill styles
m_selection.MoveFirst();
CMoFields fields(m_selection.GetFields());
CMoField  shapeField(fields.Item(COleVariant(TEXT("Shape"))));
CMoPolygon shape;
while (!m_selection.GetEof())
{
	shape.AttachDispatch(shapeField.GetValue().pdispVal);
	m_map.DrawShape(shape, sym);
	m_selection.MoveNext();
}

}

void CMO20View::mapsearch()
{
/*CMainFrame* pMainFrame = (CMainFrame*)AfxGetMainWnd();
ASSERT_VALID(pMainFrame);
// Set up states renderer



//对sates添加注记
CMoLayers layers1(m_map.GetLayers());
CMoMapLayer states1(layers1.Item(COleVariant(TEXT("states"))));
CMoLabelRenderer labRenderer;
labRenderer.CreateDispatch(TEXT("MapObjects2.LabelRenderer"));
labRenderer.SetField(TEXT("state_NAME"));
//states1.SetRenderer(labRenderer);

//对capitals添加注记
CMoMapLayer capitals(layers1.Item(COleVariant(TEXT("capitals"))));
CMoLabelPlacer labelPlacer;
labelPlacer.CreateDispatch(TEXT("MapObjects2.labelPlacer"));
labelPlacer.SetField(TEXT("city_NAME"));
labelPlacer.SetPlaceOn(false);
labelPlacer.SetPlaceAbove(false);
labelPlacer.SetPlaceBelow(true);
labelPlacer.SetDrawBackground(true);//是否显示注记对象要素
//capitals.SetRenderer(labelPlacer);
if(pMainFrame->IsDataCollectionEnabled())
{states1.SetRenderer(labRenderer);
capitals.SetRenderer(labelPlacer);
}*/



}
void CMO20View::OnLabel()
{
	CMainFrame* pMainFrame = (CMainFrame*)AfxGetMainWnd();
	ASSERT_VALID(pMainFrame);
	
//对sates添加注记
CMoLayers layers1(m_map.GetLayers());
CMoMapLayer states1(layers1.Item(COleVariant(TEXT("states"))));
CMoLabelRenderer labRenderer;
labRenderer.CreateDispatch(TEXT("MapObjects2.LabelRenderer"));
labRenderer.SetField(TEXT("state_NAME"));
//if(!pMainFrame->IsDataCollectionEnabled())
//states1.SetRenderer(labRenderer);

//对capitals添加注记
CMoMapLayer capitals(layers1.Item(COleVariant(TEXT("capitals"))));
CMoLabelPlacer labelPlacer;
labelPlacer.CreateDispatch(TEXT("MapObjects2.labelPlacer"));
labelPlacer.SetField(TEXT("city_NAME"));
labelPlacer.SetPlaceOn(false);
labelPlacer.SetPlaceAbove(false);
labelPlacer.SetPlaceBelow(true);
labelPlacer.SetDrawBackground(true);//是否显示注记对象要素
//capitals.SetRenderer(labelPlacer);
if(pMainFrame->IsDataCollectionEnabled())
{
	states1.SetRenderer(labRenderer);
    capitals.SetRenderer(labelPlacer);
}
else
{	states1.SetRenderer(NULL);

	capitals.SetRenderer(NULL);
}
m_map.Refresh();
}

void CMO20View::OnMouseDownMap2(short Button, short Shift, long X, long Y) 
{
	// TODO: Add your control notification handler code here
			if (Button==1)
	{
		m_map.SetMousePointer(moZoomIn);
		CMoRectangle rect(m_map1.TrackRectangle());
		m_map.SetExtent(rect);
	}
	else
	{
		m_mouseIsDragging = true;

		CRect rcMap;
		m_map1.GetWindowRect(rcMap);
		ScreenToClient(rcMap);
		m_oldTopLeft = rcMap.TopLeft();
		m_oldX =  X;
		m_oldY =  Y;
		
	}
	

	
}

void CMO20View::OnMouseMoveMap2(short Button, short Shift, long X, long Y) 
{
	// TODO: Add your control notification handler code here
	//	// TODO: Add your control notification handler code here
	if (Button == 1) 
m_map1.SetMousePointer(moArrow);

if (m_mouseIsDragging)
	{
		m_mouseIsDragging = false;
	
		long deltaX = m_oldX - X;
		long deltaY = m_oldY - Y;

		m_map1.SetWindowPos(NULL, m_oldTopLeft.x-deltaX, m_oldTopLeft.y-deltaY, 0, 0,SWP_NOZORDER | SWP_NOSIZE);
	
	}
	
}

void CMO20View::OnBnDown() 
{
	// TODO: Add your command handler code here
	CRect rcMap;
	m_map1.GetWindowRect(rcMap);
	ScreenToClient(rcMap);
	m_map1.SetWindowPos(NULL, rcMap.left, rcMap.top + 10 , 0, 0,SWP_NOZORDER | SWP_NOSIZE  );
	
}

void CMO20View::OnBnLeft() 
{
	// TODO: Add your command handler code here
	CRect rcMap;
	m_map1.GetWindowRect(rcMap);
	ScreenToClient(rcMap);

	m_map1.SetWindowPos(NULL, rcMap.left - 10, rcMap.top, 0, 0,
		                  SWP_NOZORDER | SWP_NOSIZE);
	
	
}

void CMO20View::OnBnRight() 
{
	// TODO: Add your command handler code here
		CRect rcMap;
	m_map1.GetWindowRect(rcMap);
	ScreenToClient(rcMap);

	m_map1.SetWindowPos(NULL, rcMap.left + 10, rcMap.top, 0, 0,
		                  SWP_NOZORDER | SWP_NOSIZE);
	
}

void CMO20View::OnBnUp() 
{
	// TODO: Add your command handler code here
		CRect rcMap;
	m_map1.GetWindowRect(rcMap);
	ScreenToClient(rcMap);
	
	m_map1.SetWindowPos(NULL, rcMap.left, rcMap.top - 10 , 0, 0,
		                  SWP_NOZORDER | SWP_NOSIZE  );

	
}

⌨️ 快捷键说明

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