📄 mapperview.cpp
字号:
// mapperView.cpp : implementation of the CMapperView class
//
#include "stdafx.h"
#include "mapper.h"
#include "mapperDoc.h"
#include "mapperView.h"
#include "seisunshisetdlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMapperView
IMPLEMENT_DYNCREATE(CMapperView, CFormView)
BEGIN_MESSAGE_MAP(CMapperView, CFormView)
//{{AFX_MSG_MAP(CMapperView)
ON_WM_SIZE()
ON_WM_CONTEXTMENU()
ON_COMMAND(ID_QUERY_CLEAR_2, OnQueryClear2)
ON_COMMAND(ID_QUERY_RECORD_2, OnQueryRecord2)
ON_COMMAND(ID_SEIS_EQ3_2, OnSeisEq32)
ON_COMMAND(ID_SEIS_EQ3_CLEAR_2, OnSeisEq3Clear2)
ON_COMMAND(ID_SEIS_EQ3_SHP_2, OnSeisEq3Shp2)
ON_COMMAND(ID_SEIS_LIEDU_2, OnSeisLiedu2)
ON_COMMAND(ID_SEIS_LIEDU_CLEAR_2, OnSeisLieduClear2)
ON_COMMAND(ID_SEIS_LIEDU_QUERY_2, OnSeisLieduQuery2)
ON_COMMAND(ID_SEIS_SHP_2, OnSeisShp2)
ON_COMMAND(ID_SEIS_SUNSHI_2, OnSeisSunshi2)
ON_COMMAND(ID_SEIS_SUNSHI_CLEAR_2, OnSeisSunshiClear2)
ON_COMMAND(ID_SHAPE_CLEAR_2, OnShapeClear2)
ON_COMMAND(ID_SHAPE_CLEAR_ALL_2, OnShapeClearAll2)
ON_COMMAND(ID_SHAPE_DATA_2, OnShapeData2)
ON_COMMAND(ID_SHAPE_DELETE_2, OnShapeDelete2)
ON_COMMAND(ID_SHAPE_EXPORT_SHP_2, OnShapeExportShp2)
ON_COMMAND(ID_SHAPE_OPEN_2, OnShapeOpen2)
ON_COMMAND(ID_SHAPE_SAVE_2, OnShapeSave2)
ON_COMMAND(ID_SHAPE_SETUP_2, OnShapeSetup2)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CFormView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CFormView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CFormView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMapperView construction/destruction
CMapperView::CMapperView()
: CFormView(CMapperView::IDD)
{
//{{AFX_DATA_INIT(CMapperView)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
// TODO: add construction code here
}
CMapperView::~CMapperView()
{
}
void CMapperView::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CMapperView)
DDX_Control(pDX, IDC_MAP, m_map);
DDX_Control(pDX, IDC_SCALEBAR, m_scale);
//}}AFX_DATA_MAP
}
BOOL CMapperView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CFormView::PreCreateWindow(cs);
}
void CMapperView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
// GetParentFrame()->RecalcLayout();
// ResizeParentToFit();
m_map.GetLayers().Clear();
m_pWnd=(CMainFrame*)AfxGetMainWnd();
int count=theApp.m_taEli.GetSize();
SMpfLayerInfo mli;
CString sType;
CFileFind ff;
CString s;
for(int i=0;i<count;i++)
{
mli=theApp.m_taEli[i];
sType=mli.szType;
//判断文件是否存在
if(!ff.FindFile(mli.szPathFile))
{
s.Format("%s 图层不存在!",mli.szPathFile);
AfxMessageBox(s);
continue;
}
if(sType=="[1]")
{
Eng_AddLayerMap(m_map,mli.szPathFile,mli.crColor);
}
if(sType=="[2]")
{
Eng_AddLayerImage(m_map,mli.szPathFile,mli.crColor);
}
if(sType=="[3]")
{
Eng_AddLayerCad(m_map,mli.szPathFile,mli.crColor);
}
if(sType=="[4]")
{
Eng_AddLayerArc(m_map,mli.szPathFile,mli.crColor);
}
if(sType=="[5]")
{
Eng_AddLayerArc(m_map,mli.szPathFile,mli.crColor);
}
//新层总是在0层
Sub_SetLayerInfo(sType,mli);
}
m_map.SetBackColor(theApp.m_tMapInfo.crBack);
Eng_SetLegend(m_map,theApp.GetLayerPane()->m_legend);
//程序内套用调用时候,map尺寸不变
if(m_map.m_hWnd)
{
CRect rect;
GetClientRect(&rect);
m_map.SetWindowPos(0,0,0,rect.Width(),rect.Height(),SWP_NOZORDER);
}
m_bPressed=FALSE;
}
/////////////////////////////////////////////////////////////////////////////
// CMapperView printing
BOOL CMapperView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CMapperView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CMapperView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
void CMapperView::OnPrint(CDC* pDC, CPrintInfo* /*pInfo*/)
{
CRect frame(0, 0, ::GetDeviceCaps(pDC->m_hAttribDC, HORZRES),
::GetDeviceCaps(pDC->m_hAttribDC, VERTRES));
FrameMap(m_map, pDC, frame);
}
/////////////////////////////////////////////////////////////////////////////
// CMapperView diagnostics
#ifdef _DEBUG
void CMapperView::AssertValid() const
{
CFormView::AssertValid();
}
void CMapperView::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}
CMapperDoc* CMapperView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMapperDoc)));
return (CMapperDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CMapperView message handlers
void CMapperView::OnSize(UINT nType, int cx, int cy)
{
CFormView::OnSize(nType, cx, cy);
if(m_map.m_hWnd)
m_map.SetWindowPos(0,0,0,cx,cy,SWP_NOZORDER);
// if(m_scale.m_hWnd)
// m_scale.SetWindowPos(0,10,cy-30,160,20,SWP_NOZORDER);
if(m_scale.m_hWnd)
m_scale.ShowWindow(SW_HIDE);
}
BEGIN_EVENTSINK_MAP(CMapperView, CFormView)
//{{AFX_EVENTSINK_MAP(CMapperView)
ON_EVENT(CMapperView, IDC_MAP, -605 /* MouseDown */, OnMouseDownMap, VTS_I2 VTS_I2 VTS_I4 VTS_I4)
ON_EVENT(CMapperView, IDC_MAP, -606 /* MouseMove */, OnMouseMoveMap, VTS_I2 VTS_I2 VTS_I4 VTS_I4)
ON_EVENT(CMapperView, IDC_MAP, 4 /* AfterTrackingLayerDraw */, OnAfterTrackingLayerDrawMap, VTS_I4)
ON_EVENT(CMapperView, IDC_MAP, -607 /* MouseUp */, OnMouseUpMap, VTS_I2 VTS_I2 VTS_I4 VTS_I4)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()
void CMapperView::OnMouseDownMap(short Button, short Shift, long X, long Y)
{
switch(m_pWnd->m_uID)
{
case ID_SHAPE_SELECT:
{
m_bPressed=TRUE;
m_ptPressed=m_map.ToMapPoint((float)X,(float)Y);
}
m_oShape.HitTest(m_map,X,Y);
m_map.Refresh();
break;
case ID_SHAPE_POINT:
m_oShape.mo_AddPoint(m_map,X,Y);
break;
case ID_SHAPE_LINE:
m_oShape.mo_AddLine(m_map);
break;
case ID_SHAPE_RECT:
m_oShape.mo_AddRect(m_map);
break;
case ID_SHAPE_CIRCLE:
m_oShape.mo_AddCircle(m_map);
break;
case ID_SHAPE_ELLIPSE:
m_oShape.mo_AddEllipse(m_map);
break;
case ID_SHAPE_POLY:
m_oShape.mo_AddPoly(m_map);
break;
case ID_SHAPE_TEXT:
m_oShape.mo_AddText(m_map);
break;
case ID_QUERY_POINT:
{
CMoPoint pt(m_map.ToMapPoint((float)X, (float)Y));
// const double tolerance = m_map.ToMapDistance((float)5); //运行5个像素???
double tolerance = m_map.ToMapDistance((float)theApp.m_tMapSetup.nPickTol);
short iLayer=theApp.GetLayerPane()->m_legend.getActiveLayer();
CMoMapLayer layer=m_map.GetLayers().Item(COleVariant(iLayer));
if(layer.m_lpDispatch==NULL)
{
AfxMessageBox("必须先选择一个图层!");
return;
}
m_sQuery=layer.GetName();
m_rsQuery=layer.SearchByDistance(pt, tolerance, TEXT(""));
VARIANT va;
VariantInit(&va);
va.vt = VT_NULL;
m_map.GetTrackingLayer().Refresh(true,va);
//无选中对象,不弹出对话框
if(m_rsQuery.GetCount()<=0)
{
if(m_dlgRs.m_hWnd)
m_dlgRs.ShowWindow(SW_HIDE);
return;
}
if(!m_dlgRs.m_hWnd)
m_dlgRs.Create(IDD_RECORD_DATA,AfxGetMainWnd());
else
m_dlgRs.ShowWindow(SW_SHOW);
{
m_dlgRs.m_oData.DeleteAllItems();
if(LPDISPATCH(m_rsQuery)!=0)
{
CMoTableDesc table=m_rsQuery.GetTableDesc();
CMoFields fields(m_rsQuery.GetFields());
m_rsQuery.MoveFirst();
for(short i=0;i<table.GetFieldCount();i++)
{
CMoField field(fields.Item(COleVariant(table.GetFieldName(i))));
m_dlgRs.m_oData.InsertItem(i,table.GetFieldName(i));
m_dlgRs.m_oData.SetItemText(i,1,field.GetValueAsString());
}
}
}
}
break;
case ID_QUERY_LINE:
{
CMoLine l=m_map.TrackLine();
if((l.m_lpDispatch!=NULL)&&(Button==1)) //右键不运行
{
short iLayer=theApp.GetLayerPane()->m_legend.getActiveLayer();
if(iLayer<0)
return;
CMoMapLayer layer=m_map.GetLayers().Item(COleVariant(iLayer));
m_sQuery=layer.GetName();
m_rsQuery= layer.SearchShape(l, moAreaIntersect, TEXT(""));
VARIANT va;
VariantInit(&va);
va.vt = VT_NULL;
m_map.GetTrackingLayer().Refresh(true,va);
}
}
break;
case ID_QUERY_RECT:
{
CMoRectangle r=m_map.TrackRectangle();
if((r.m_lpDispatch!=NULL)&&(Button==1)) //右键不运行
{
short iLayer=theApp.GetLayerPane()->m_legend.getActiveLayer();
if(iLayer<0)
return;
CMoMapLayer layer=m_map.GetLayers().Item(COleVariant(iLayer));
m_sQuery=layer.GetName();
m_rsQuery = layer.SearchShape(r, moAreaIntersect, TEXT(""));
VARIANT va;
VariantInit(&va);
va.vt = VT_NULL;
m_map.GetTrackingLayer().Refresh(true,va);
}
}
break;
case ID_QUERY_POLY:
{
CMoPolygon p=m_map.TrackPolygon();
if((p.m_lpDispatch!=NULL)&&(Button==1)) //右键不运行
{
short iLayer=theApp.GetLayerPane()->m_legend.getActiveLayer();
if(iLayer<0)
return;
CMoMapLayer layer=m_map.GetLayers().Item(COleVariant(iLayer));
m_sQuery=layer.GetName();
m_rsQuery = layer.SearchShape(p, moAreaIntersect, TEXT(""));
VARIANT va;
VariantInit(&va);
va.vt = VT_NULL;
m_map.GetTrackingLayer().Refresh(true,va);
}
}
break;
case ID_QUERY_DISTANCE:
{
//跟踪屏幕坐标才可以动态提供距离数据,但是需要自己控制,很麻烦
//使用map功能则只能最后提供结果
// Track a new line
m_oQueryLine =m_map.TrackLine();
if (LPDISPATCH(m_oQueryLine))
{
double ll=m_oQueryLine.GetLength();
double km=ll*111.11; //默认为:度
CString s;
s.Format("距离: d=%lf(km)",km);
m_pWnd->MsgOutBar(s,3);
// CMoRectangle r = CMoRectangle(m_oDistLine.GetExtent());
// m_map.RefreshRect(r.m_lpDispatch);
m_map.Refresh();
}
}
break;
case ID_QUERY_AREA:
{
m_oQueryPoly=m_map.TrackPolygon();
if (LPDISPATCH(m_oQueryPoly))
{
double a=m_oQueryPoly.GetArea();
CString s;
s.Format("面积: a=%lf",a);
m_pWnd->MsgOutBar(s,3);
m_map.Refresh();
}
}
break;
case ID_DRAW_ZOOMIN:
{
CMoRectangle r(m_map.TrackRectangle());
if(LPDISPATCH(r))
m_map.SetExtent(r);
}
break;
case ID_DRAW_ZOOMOUT:
{
CMoRectangle r(m_map.GetExtent());
if(LPDISPATCH(r))
{
r.ScaleRectangle(1.5);
m_map.SetExtent(r);
}
}
break;
case ID_DRAW_PAN:
m_map.Pan();
break;
/*
case ID_SEIS_SUNSHI:
{
CSeiSunShiSetDlg ssssd;
ssssd.m_nMin=m_oLiedu.m_nLiedu0;
ssssd.m_nMax=m_oLiedu.m_nLiedu1;
if(ssssd.DoModal()!=IDOK)
return;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -