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

📄 mainfrm.cpp

📁 用vc++结合mo开发的一个地震系统,实现了基本的功能,如放大,缩小
💻 CPP
📖 第 1 页 / 共 4 页
字号:
void CMainFrame::OnQueryClear() 
{
	theApp.GetMapPane()->m_rsQuery.ReleaseDispatch();
	theApp.GetMapPane()->m_sQuery="";
	theApp.GetMapPane()->m_map.Refresh();	
}

void CMainFrame::MsgOutBar(CString sMsg, int nPane)
{
	m_wndStatusBar.SetPaneText(nPane, sMsg);
	m_wndStatusBar.UpdateWindow();
}

void CMainFrame::OnQueryDistance() 
{
	m_uID=ID_QUERY_DISTANCE;	
}

void CMainFrame::OnUpdateQueryDistance(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(m_uID==ID_QUERY_DISTANCE);	
}


void CMainFrame::OnQueryArea() 
{
	m_uID=ID_QUERY_AREA;	
}

void CMainFrame::OnUpdateQueryArea(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(m_uID==ID_QUERY_AREA);
	
}

void CMainFrame::OnRenderDefault() 
{
	short nLayer=theApp.GetLayerPane()->m_legend.getActiveLayer();
	if(nLayer<0)
	{
		AfxMessageBox("必须先选择一个图层!");
		return;
	}
	
	CMoMapLayer layer(theApp.GetMapPane()->m_map.GetLayers().Item(COleVariant(nLayer)));
	layer.SetRenderer(0);
	theApp.GetMapPane()->m_map.Refresh();
}

void CMainFrame::OnRenderLabel() 
{
	short nLayer=theApp.GetLayerPane()->m_legend.getActiveLayer();
	if(nLayer<0)
	{
		AfxMessageBox("必须先选择一个图层!");
		return;
	}
	
	CMoMapLayer layer(theApp.GetMapPane()->m_map.GetLayers().Item(COleVariant(nLayer)));

	CRenderTipDlg rtd;
	Eng_GetLayerField(theApp.GetMapPane()->m_map,nLayer,rtd.m_taLayerField);
	CMoRectangle r=theApp.GetMapPane()->m_map.GetExtent();
	rtd.m_dSize=r.GetWidth()/theApp.m_tMapSetup.dFontSize;
	if(rtd.DoModal()!=IDOK)
		return;

	//标注名称,用于poly,point,标注内容可能会互相覆盖
	CMoFont font;
	font.SetName(rtd.m_sName);
	CMoLabelRenderer lr;
	lr.CreateDispatch(TEXT("MapObjects2.LabelRenderer"));
	CMoTextSymbol sym(lr.GetSymbol(0));
	sym.SetFont(font);
	
	sym.SetHeight(rtd.m_dSize);
	sym.SetColor(rtd.m_oColor.GetColor());
	lr.SetField(TEXT(rtd.m_sField));

	lr.SetAllowDuplicates(FALSE);
	layer.SetRenderer(lr);
	lr.ReleaseDispatch();

	theApp.GetMapPane()->m_map.Refresh();
}

void CMainFrame::OnRenderPlacer() 
{
	short nLayer=theApp.GetLayerPane()->m_legend.getActiveLayer();
	if(nLayer<0)
	{
		AfxMessageBox("必须先选择一个图层!");
		return;
	}
	
	CMoMapLayer layer(theApp.GetMapPane()->m_map.GetLayers().Item(COleVariant(nLayer)));
	//layer.SetRenderer(0);	

	CRenderTipDlg rtd;
	Eng_GetLayerField(theApp.GetMapPane()->m_map,nLayer,rtd.m_taLayerField);
	CMoRectangle r=theApp.GetMapPane()->m_map.GetExtent();
	rtd.m_dSize=r.GetWidth()/theApp.m_tMapSetup.dFontSize;
	if(rtd.DoModal()!=IDOK)
		return;

	{
		//自动标注,用于poly,line,point,不覆盖字符,需要指定标识字段
		CMoFont fnt;
		fnt.SetName(rtd.m_sName);
		fnt.SetWeight(FW_BOLD);
		CMoLabelPlacer lp;
		lp.CreateDispatch("MapObjects2.LabelPlacer");
		
		lp.SetField(TEXT(rtd.m_sField));

		lp.SetDrawBackground(true); 
		lp.SetAllowDuplicates(false);
		lp.SetMaskColor(theApp.GetMapPane()->m_map.GetBackColor());
		lp.SetPlaceAbove(false);
		lp.SetPlaceBelow(false);
		lp.SetPlaceOn(true);
		
		CMoTextSymbol textSym(lp.GetDefaultSymbol());
		textSym.SetFont(fnt);
	
		textSym.SetHeight(rtd.m_dSize);
		textSym.SetColor(rtd.m_oColor.GetColor());
		
		layer.SetRenderer(lp);
		lp.ReleaseDispatch();
	}
	theApp.GetMapPane()->m_map.Refresh();
}

void CMainFrame::OnRenderDot() 
{
	short nLayer=theApp.GetLayerPane()->m_legend.getActiveLayer();
	if(nLayer<0)
	{
		AfxMessageBox("必须先选择一个图层!");
		return;
	}
	
	CMoMapLayer layer(theApp.GetMapPane()->m_map.GetLayers().Item(COleVariant(nLayer)));

	CRenderDotDlg rdd;
	Eng_GetLayerField(theApp.GetMapPane()->m_map,nLayer,rdd.m_taLayerField);
	if(rdd.DoModal()!=IDOK)
		return;
	
	{
		//点,用于poly,用到了统计功能,可以显示疏密程度
		CMoDotDensityRenderer ddr;
		VERIFY(ddr.CreateDispatch(TEXT("MapObjects2.DotDensityRenderer")));
		LPCTSTR fieldName = TEXT(rdd.m_sField);
		ddr.SetField(fieldName);
		CMoRecordset recs(layer.GetRecords());
		CMoStatistics stats(recs.CalculateStatistics(fieldName));
		double range = stats.GetMax() - stats.GetMin();
		ddr.SetDotValue((stats.GetMin() + range/2.0) / 40.0);
		ddr.SetDotColor(rdd.m_oColor.GetColor());
		ddr.SetDotSize(rdd.m_iSize);
		layer.SetRenderer(ddr);
		ddr.ReleaseDispatch();
	}
	theApp.GetMapPane()->m_map.Refresh();
}

void CMainFrame::OnRenderValue() 
{
	short nLayer=theApp.GetLayerPane()->m_legend.getActiveLayer();
	if(nLayer<0)
	{
		AfxMessageBox("必须先选择一个图层!");
		return;
	}
	
	CMoMapLayer layer(theApp.GetMapPane()->m_map.GetLayers().Item(COleVariant(nLayer)));

	CRenderValueDlg rvd;
	Eng_GetLayerField(theApp.GetMapPane()->m_map,nLayer,rvd.m_taLayerField);
	if(rvd.DoModal()!=IDOK)
		return;
	
	{
		//用数据的序列,可以是字符数据,用于poly,显示不同的颜色
		CMoStrings strings;
		VERIFY(strings.CreateDispatch(TEXT("MapObjects2.Strings")));

		CMoRecordset recs(layer.GetRecords());
		CMoFields fields(recs.GetFields());

		while (!recs.GetEof())
		{
			CMoField field(fields.Item(COleVariant(rvd.m_sField)));
			strings.Add(field.GetValueAsString());
			recs.MoveNext();
		}
			
		CMoValueMapRenderer vmr;
		VERIFY(vmr.CreateDispatch(TEXT("MapObjects2.ValueMapRenderer")));
		vmr.SetField(TEXT(rvd.m_sField));
		vmr.SetValueCount(strings.GetCount());

		for (short i = 0; i < strings.GetCount(); i++)
			vmr.SetValue(i, strings.Item(COleVariant(i)));

		layer.SetRenderer(vmr);
		vmr.ReleaseDispatch();
	}
	theApp.GetMapPane()->m_map.Refresh();
}

void CMainFrame::OnRenderBar() 
{
	short nLayer=theApp.GetLayerPane()->m_legend.getActiveLayer();
	if(nLayer<0)
	{
		AfxMessageBox("必须先选择一个图层!");
		return;
	}
	
	CMoMapLayer layer(theApp.GetMapPane()->m_map.GetLayers().Item(COleVariant(nLayer)));

	CRenderChartDlg rcd;
	Eng_GetLayerField(theApp.GetMapPane()->m_map,nLayer,rcd.m_taLayerField);
	if(rcd.DoModal()!=IDOK)
		return;

	{
		//显示数值状态,可以有多个同时处理
		CMoRecordset rs(layer.GetRecords());
		CMoChartRenderer cb;
		cb.CreateDispatch(TEXT("MapObjects2.ChartRenderer"));
		cb.SetChartType(moBar);
		LPCTSTR fieldName = TEXT(rcd.m_sField);
		cb.SetFieldCount(1);
		cb.SetField(0,fieldName);	//只处理一个
		cb.SetBarHeight(rcd.m_iHeight);
		cb.SetBarWidth(rcd.m_iWidth);
		cb.SetColor(0,rcd.m_oColor.GetColor());
		layer.SetRenderer(cb);
		cb.ReleaseDispatch();
	}
	theApp.GetMapPane()->m_map.Refresh();
}

void CMainFrame::OnRenderPie() 
{
	short nLayer=theApp.GetLayerPane()->m_legend.getActiveLayer();
	if(nLayer<0)
	{
		AfxMessageBox("必须先选择一个图层!");
		return;
	}
	
	CMoMapLayer layer(theApp.GetMapPane()->m_map.GetLayers().Item(COleVariant(nLayer)));

	CRenderPieDlg rpd;
	Eng_GetLayerField(theApp.GetMapPane()->m_map,nLayer,rpd.m_taLayerField);
	if(rpd.DoModal()!=IDOK)
		return;

	short i,count=rpd.m_taPie.GetSize();
	{
		//显示数值状态,可以有多个同时处理
		CMoRecordset rs(layer.GetRecords());
		CMoChartRenderer cb;
		cb.CreateDispatch(TEXT("MapObjects2.ChartRenderer"));
		cb.SetChartType(moPie);
		LPCTSTR fieldName = TEXT(rpd.m_sField);
		cb.SetFieldCount(count);
		
		for(i=0;i<count;i++)
		{
			cb.SetField(i,rpd.m_taPie[i].field);
			cb.SetColor(i,rpd.m_taPie[i].color);
		}

//		cb.SetNormalizationField("AREA");
		cb.SetSizeField(rpd.m_sSizeField);
		cb.SetMinPieSize(rpd.m_iMin);
		cb.SetMaxPieSize(rpd.m_iMax);

		layer.SetRenderer(cb);
		cb.ReleaseDispatch();
	}
	theApp.GetMapPane()->m_map.Refresh();	
	
}

void CMainFrame::OnRenderBreak() 
{
	short nLayer=theApp.GetLayerPane()->m_legend.getActiveLayer();
	if(nLayer<0)
	{
		AfxMessageBox("必须先选择一个图层!");
		return;
	}
	
	CMoMapLayer layer(theApp.GetMapPane()->m_map.GetLayers().Item(COleVariant(nLayer)));

	CRenderBreakDlg rbd;
	Eng_GetLayerField(theApp.GetMapPane()->m_map,nLayer,rbd.m_taLayerField);
	if(rbd.DoModal()!=IDOK)
		return;

	{
		//数据的分段,用于poly,显示不同颜色
		CMoClassBreaksRenderer cbr;
		VERIFY(cbr.CreateDispatch(TEXT("MapObjects2.ClassBreaksRenderer")));
		CMoRecordset recs(layer.GetRecords());

		LPCTSTR fieldName = TEXT(rbd.m_sField);
		cbr.SetField(fieldName);
		CMoStatistics stats(recs.CalculateStatistics(fieldName));

	//使用平均分隔
		int numClasses = rbd.m_iBreaks;
		cbr.SetBreakCount(numClasses);

		double val;
		double min=stats.GetMin();
		double max=stats.GetMax();
		double range=max-min;
		double step=range/(double)numClasses;
		for (int i = 0; i < numClasses; i++)
		{
			val=min+step*i;
			cbr.SetBreak(i, val);
		}

		cbr.RampColors(rbd.m_oColor0.GetColor(),rbd.m_oColor1.GetColor());
		layer.SetRenderer(cbr);
		cbr.ReleaseDispatch();
	}
	theApp.GetMapPane()->m_map.Refresh();		
}

void CMainFrame::OnShapeCircle() 
{
	m_uID=ID_SHAPE_CIRCLE;
}

void CMainFrame::OnUpdateShapeCircle(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(m_uID==ID_SHAPE_CIRCLE);		
}

void CMainFrame::OnShapeEllipse() 
{
	m_uID=ID_SHAPE_ELLIPSE;	
}

void CMainFrame::OnUpdateShapeEllipse(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(m_uID==ID_SHAPE_ELLIPSE);	
}

void CMainFrame::OnShapeLine() 
{
	m_uID=ID_SHAPE_LINE;		
}

void CMainFrame::OnUpdateShapeLine(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(m_uID==ID_SHAPE_LINE);	
}

void CMainFrame::OnShapePoint() 
{
	m_uID=ID_SHAPE_POINT;		
}

void CMainFrame::OnUpdateShapePoint(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(m_uID==ID_SHAPE_POINT);		
}

void CMainFrame::OnShapePoly() 
{
	m_uID=ID_SHAPE_POLY;	
}

void CMainFrame::OnUpdateShapePoly(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(m_uID==ID_SHAPE_POLY);	
}

void CMainFrame::OnShapeRect() 
{
	m_uID=ID_SHAPE_RECT;	
}

void CMainFrame::OnUpdateShapeRect(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(m_uID==ID_SHAPE_RECT);	
}

void CMainFrame::OnShapeSetup() 
{
	if(theApp.GetMapPane()->m_oShape.Setup())
		theApp.GetMapPane()->m_map.Refresh();
}

void CMainFrame::OnShapeExportShp() 
{
	// Get file name
	CFileDialog	fd(TRUE,"shp",NULL,OFN_EXPLORER|OFN_HIDEREADONLY|OFN_ALLOWMULTISELECT,
		"SHP文件(*.shp)|*.shp||",this);
	if(fd.DoModal()!=IDOK)
		return;

	CString sPathFile=fd.GetPathName();
	BOOL bSaved=FALSE;	
	switch (m_uID)
	{
	case ID_SHAPE_POINT:
		bSaved=theApp.GetMapPane()->m_oShape.mo_ExportPoints(sPathFile); 
		break;
	case ID_SHAPE_LINE:	
		bSaved=theApp.GetMapPane()->m_oShape.mo_ExportLines(sPathFile); 
		break;
	case ID_SHAPE_RECT:
		bSaved=theApp.GetMapPane()->m_oShape.mo_ExportRects(sPathFile); 
		break;
	case ID_SHAPE_CIRCLE:
		bSaved=theApp.GetMapPane()->m_oShape.mo_ExportCircles(sPathFile); 
		break;
	case ID_SHAPE_ELLIPSE:
		bSaved=theApp.GetMapPane()->m_oShape.mo_ExportEllipses(sPathFile); 
		break;
	case ID_SHAPE_POLY:
		bSaved=theApp.GetMapPane()->m_oShape.mo_ExportPolys(sPathFile); 
		break;
	case ID_SHAPE_TEXT:
		bSaved=theApp.GetMapPane()->m_oShape.mo_ExportTexts(sPathFile); 
		break;
	}
	
	if(bSaved)
	{
		int nRes=AfxMessageBox("是否将保存的shp文件添加到当前工程",MB_YESNO);
		if(nRes==IDYES)
		{
			Eng_AddLayerMap(theApp.GetMapPane()->m_map,sPathFile,RGB(128,128,0));

⌨️ 快捷键说明

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