📄 mapview.cpp
字号:
CView::OnDestroy();
CMainFrame* pFrame=((CMainFrame*)AfxGetMainWnd());
pFrame->m_pMapView=NULL;
}
void CMapView::OnAddTarget()
{
m_ctrlMapX.SetCurrentTool(GPS_ADDTARGET);
}
void CMapView::OnUpdateAddTarget(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(m_ctrlMapX.GetCurrentTool()==GPS_ADDTARGET);
}
void CMapView::OnEditTarget()
{
m_ctrlMapX.SetCurrentTool(GPS_EDITTARGET);
}
void CMapView::OnUpdateEditTarget(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(m_ctrlMapX.GetCurrentTool()==GPS_EDITTARGET);
}
void CMapView::OnStartGps()
{
SetTimer(100,1500,NULL);
m_bIsStartGps=TRUE;
//SetAnimationLayer();
}
void CMapView::OnUpdateStartGps(CCmdUI* pCmdUI)
{
pCmdUI->Enable(!m_bIsStartGps);
}
void CMapView::OnEndGps()
{
KillTimer(100);
m_bIsStartGps=FALSE;
}
void CMapView::OnUpdateEndGps(CCmdUI* pCmdUI)
{
pCmdUI->Enable(m_bIsStartGps);
}
//鼠标操作
void CMapView::OnMouseDownMap(short Button, short Shift, float X, float Y)
{
if(Button==1){
m_nGpsOperation=m_ctrlMapX.GetCurrentTool();
switch(m_nGpsOperation)
{
case GPS_ADDTARGET:{
double lonX,latY;
m_ctrlMapX.ConvertCoord(&X,&Y,&lonX,&latY,miScreenToMap);
//gpsTarget.SetStartXY(lonX,latY);
m_pTarget=new CGpsSet;
m_pTarget->SetStartXY(lonX,latY);
CTargetSet dlg(*m_pTarget);
if(dlg.DoModal()==IDOK)
dlg.GetGpsData(*m_pTarget);
else return;
if(!FindLayer("gps"))
m_ctrlMapX.GetLayers().Add("gps.tab");
CMapXLayer layer;
if(FindLayer("gps",layer))
{
m_pTarget->AddFeature(&m_ctrlMapX,layer);
gpsTargetArray.AddTarget(m_pTarget);
}
else
{
MessageBox("不能发现移动图层");
}
}break;
case GPS_EDITTARGET:
{
gpsTargetArray.SetActiveTarget(gpsTargetArray.HitTest(X, Y,&m_ctrlMapX));
if(gpsTargetArray.m_pActiveTarget==NULL) return;
CTargetSet dlg(*gpsTargetArray.m_pActiveTarget);
if(dlg.DoModal()==IDOK)
dlg.GetGpsData(*gpsTargetArray.m_pActiveTarget);
else return;
}break;
}
}
}
BOOL CMapView::OnMouseUpInMap(short Button, short Shift, OLE_XPOS_PIXELS x, OLE_YPOS_PIXELS y)
{
return TRUE;
}
// you could use this to display the lat/long values on the status bar
BOOL CMapView::OnMouseMoveInMap(short Button, short Shift, OLE_XPOS_PIXELS x, OLE_YPOS_PIXELS y)
{
return TRUE;
}
//选择目标样式
void CMapView::OnGpsChangesymbol()
{
if(!FindLayer("gps"))
m_ctrlMapX.GetLayers().Add("gps.tab");
CMapXLayer layer;
if(FindLayer("gps",layer))
{
CMapXStyle style=layer.GetStyle();
style.PickSymbol();
layer.SetStyle(style.m_lpDispatch);
}
else
{
MessageBox("不能发现移动图层");
}
}
void CMapView::OnUpdateGpsChangesymbol(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
}
void CMapView::OnTimer(UINT nIDEvent)
{
gpsTargetArray.Run();
UpdateSense();
CView::OnTimer(nIDEvent);
}
void CMapView::UpdateSense()
{
CMapXLayer layer;
if(FindLayer("gps",layer))
gpsTargetArray.UpdateGraph(layer);
layer.Refresh();
}
void CMapView::SetAnimationLayer()
{
if(!FindLayer("gps"))
m_ctrlMapX.GetLayers().Add("gps.tab");
CMapXLayer layer;
if(FindLayer("gps",layer))
m_ctrlMapX.GetLayers().SetAnimationLayer(layer.m_lpDispatch);
}
void CMapView::ClearAllTarget()
{
CMapXLayer layer;
if(FindLayer("gps",layer))
{
CMapXFeatures features=layer.AllFeatures();
for(int i=1;i<=features.GetCount();i++)
layer.DeleteFeature(features.Item(i));
gpsTargetArray.DeleteAllTarget();
}
}
BOOL CMapView::DestroyWindow()
{
return CView::DestroyWindow();
}
void CMapView::OnChangeSymbol()
{
m_bIsAutoLable=!m_bIsAutoLable;
CMapXLayer layer;
if(FindLayer("gps",layer))
{
/* CString str1=m_strEditLayer;
CMapXDataset dataSet;
if(!IsInDataSet(m_strEditLayer))
dataSet=m_pCtrlMapX->GetDatasets().Add(miDataSetLayer, vtLayer, str1);*/
layer.SetAutoLabel(m_bIsAutoLable);
}
}
void CMapView::OnUpdateChangeSymbol(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(m_bIsAutoLable);
}
void CMapView::OnLineChange()
{
CMapXStyle style=m_ctrlMapX.GetDefaultStyle();
style.PickLine();
}
void CMapView::OnReagionChange()
{
CMapXStyle style=m_ctrlMapX.GetDefaultStyle();
style.PickRegion();
}
void CMapView::OnMapxProperty()
{
m_ctrlMapX.PropertyPage();
}
void CMapView::OnDatabindNormal()
{
try {
CMapXLayer layer = m_ctrlMapX.GetLayers().Item("USA");
VARIANT vtLayer;
vtLayer.vt = VT_DISPATCH;
vtLayer.pdispVal = layer.m_lpDispatch;
CMapXDataset dataSet = m_ctrlMapX.GetDatasets().Add(miDataSetLayer, vtLayer, "USA Layer");
}
catch (COleDispatchException *e) {
e->ReportError();
e->Delete();
}
catch (COleException *e) {
e->ReportError();
e->Delete();
}
}
void CMapView::OnUpdateDatabindNormal(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
}
void CMapView::OnBinddataOdbc()
{
// TODO: Add your command handler code here
}
void CMapView::OnUpdateBinddataOdbc(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
}
void CMapView::OnBinddataArray()
{
// TODO: Add your command handler code here
}
void CMapView::OnUpdateBinddataArray(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
}
void CMapView::OnBinddataNobind()
{
// TODO: Add your command handler code here
}
void CMapView::OnUpdateBinddataNobind(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
}
void CMapView::OnThemeReange()
{
VARIANT Type;
VARIANT Name;
VARIANT Field;
VARIANT Item;
// long FieldNums =4; // theme field numbers
long FieldNums[3] = { 3, 4, 5}; // theme field numbers
int n=3;
// construct a safearray of column numbers (could use names instead)
/*SAFEARRAY FAR* psa=NULL;
SAFEARRAYBOUND rgsabound[1];
long ix;
rgsabound[0].lLbound = 1;
rgsabound[0].cElements = n;
psa = SafeArrayCreate(VT_I4, 1, rgsabound);
if(psa == NULL){
return;
}
for (int i=0; i< n; i++) {
ix=i+1;
SafeArrayPutElement(psa, &ix, &FieldNums[i]);
}*/
// put array in field param
Field.vt = /*VT_ARRAY |*/ VT_I4;
//Field.parray = psa;
Field.lVal = 5;
Type.vt = VT_I4;
Type.lVal = miThemeRanged; //auto choose theme type
Name.vt = VT_ERROR; // use default name
Name.scode = DISP_E_PARAMNOTFOUND;
//miThemeRanged = 0,
//miThemeBarChart = 1,
//miThemePieChart = 2,
//miThemeGradSymbol = 3,
//miThemeDotDensity = 4,
//miThemeIndividualValue = 5,
//miThemeAuto = 6,
//miThemeNone = 9,
try {
// get themes collection
CMapXThemes objThemes = m_ctrlMapX.GetDatasets()[1L].GetThemes();
// want to see full legend
m_ctrlMapX.SetPreferCompactLegends(FALSE);
// add theme - will be visible by default
CMapXTheme thm = objThemes.Add(Type, Field, Name);
thm.ThemeDlg();
//CMapXThemeProperties themeDlg=thm.GetThemeProperties();
//CMapXRangeCategories cate=themeDlg.GetRangeCategories();
//cate.GetProperty();
}
catch (COleDispatchException *e) {
e->ReportError();
e->Delete();
}
catch (COleException *e) {
e->ReportError();
e->Delete();
}
}
void CMapView::OnUpdateThemeReange(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
}
void CMapView::OnThemeDot()
{
// TODO: Add your command handler code here
}
void CMapView::OnUpdateThemeDot(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
}
void CMapView::OnThemePie()
{
// TODO: Add your command handler code here
}
void CMapView::OnUpdateThemePie(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
}
void CMapView::OnThemeSymbol()
{
// TODO: Add your command handler code here
}
void CMapView::OnUpdateThemeSymbol(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
}
void CMapView::OnThemeIndiv()
{
// TODO: Add your command handler code here
}
void CMapView::OnUpdateThemeIndiv(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
}
void CMapView::OnThemeBar()
{
VARIANT Type;
VARIANT Name;
VARIANT Field;
VARIANT Item;
long FieldNums[3] = { 4, 5, 6}; // theme field numbers
int n=3;
Type.vt = VT_I4;
Type.lVal = miThemeBarChart; //auto choose theme type
Name.vt = VT_ERROR; // use default name
Name.scode = DISP_E_PARAMNOTFOUND;
Item.vt = VT_I4; // for getting first dataset
Item.lVal = 1;
// construct a safearray of column numbers (could use names instead)
SAFEARRAY FAR* psa=NULL;
SAFEARRAYBOUND rgsabound[1];
long ix;
rgsabound[0].lLbound = 1;
rgsabound[0].cElements = n;
psa = SafeArrayCreate(VT_I4, 1, rgsabound);
if(psa == NULL){
return;
}
for (int i=0; i< n; i++) {
ix=i+1;
SafeArrayPutElement(psa, &ix, &FieldNums[i]);
}
// put array in field param
Field.vt = VT_ARRAY | VT_I4;
Field.parray = psa;
try {
// get themes collection
CMapXThemes objThemes = m_ctrlMapX.GetDatasets()[1L].GetThemes();
// want to see full legend
m_ctrlMapX.SetPreferCompactLegends(FALSE);
// add theme - will be visible by default
CMapXTheme thm = objThemes.Add(Type, Field, Name);
}
catch (COleDispatchException *e) {
e->ReportError();
e->Delete();
}
catch (COleException *e) {
e->ReportError();
e->Delete();
}
// clean up fields array
if (psa)
SafeArrayDestroy(psa);
}
void CMapView::OnUpdateThemeBar(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -