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

📄 firstmapview.cpp

📁 具有地图的放大、缩小、漫游、属性查询、图层控制等功能。
💻 CPP
📖 第 1 页 / 共 4 页
字号:
					X_Scale = rect_Extent.GetHeight()/m_map.GetFullExtent().GetHeight();
					Y_Scale = rect_Extent.GetWidth()/m_map.GetFullExtent().GetWidth();
					double m_Scale = X_Scale;
					if(X_Scale > Y_Scale)
						m_Scale = Y_Scale;
					select_Rect.SetBottom(y-50*m_Scale);
					select_Rect.SetTop(y+50*m_Scale);
					select_Rect.SetLeft(x-50*m_Scale);
					select_Rect.SetRight(x+50*m_Scale);
					//* * 2 由查询范围选择目标
					CMoMapLayer seletedMapLayer(layers.Item(COleVariant(m_comboxEdit)));
					CMoRecordset m_SelectedRecSet;
					m_SelectedRecSet = seletedMapLayer.SearchShape(select_Rect,6," ");
					//* * 3 得到选取目标的属性信息
				//	tableDesc=m_SelectedRecSet.GetTableDesc();
					CMoFields    ShapeFields(m_SelectedRecSet.GetFields());
					
					CMoField     ShapeField1(ShapeFields.Item(COleVariant(TEXT("Shape"))));
					CMoPolygon	 shape(ShapeField1.Get_Value().pdispVal);
					m_map.FlashShape(shape,1);
					
					//dlg_list.DoModal();
					delete m_dlglist;
					m_dlglist=new CDlgList;
					this->m_dlglist->m_RecSet = m_SelectedRecSet;
					m_dlglist->Create(IDD_DIALOG3,this);
					m_dlglist->ShowWindow(SW_SHOW);

				}
			}
			if(m_comboxEdit =="")
				MessageBox("没有图层!",NULL,MB_ICONEXCLAMATION | MB_ICONWARNING);
			break;	
		}
		case ID_SELECT_FEATURE:
		{
			if(Button ==1)
			{
				SelectFeatToSelection(m_map, Shift, X, Y);
				OnRefreshNavigationWindow();
			}
			break;
		}
	}
	if(m_comboxEdit !="")
	{
		if(m_CurrentOperation == Query_Rectangle && Button ==1)
		{
			//m_map:CMap控件的对象
			//select_Rect:范围选取用矩形
			//* * 1 获得查询范围
			CMoRectangle select_Rect(m_map.TrackRectangle());

			//* * 2 由查询范围选择目标
			CMoMapLayer seletedMapLayer(layers.Item(COleVariant(m_comboxEdit)));
			CMoRecordset m_SelectedRecSet;
			m_SelectedRecSet = seletedMapLayer.SearchShape(select_Rect,6," ");
			//* * 3 得到选取目标的属性信息
			delete this->m_multList;
			m_multList = new CDlgMultList;
			m_multList->m_RecSet = m_SelectedRecSet;
			m_multList->Create(IDD_DIALOG4,this);
			m_multList->ShowWindow(SW_SHOW);

		/*	m_SelectedRecSet.MoveFirst();
			while(!m_SelectedRecSet.GetEof())
			{
				CMoTableDesc tableDesc(m_SelectedRecSet.GetTableDesc());
				CMoFields ShapeFields(m_SelectedRecSet.GetFields());
				CMoField ShapeField;
				
				for(int i=0;i< tableDesc.GetFieldCount();i++)
				{
					CString name = tableDesc.GetFieldName(i);
					ShapeField = ShapeFields.Item(COleVariant(name));
					CString value = ShapeField.GetValueAsString();
					resultStr = resultStr + name + ":" + value + "\n";
				}
				//将得到的属性信息存储下来
			
				CMoFields selectedShapeFields(m_SelectedRecSet.GetFields());
				CMoField selectedShapeField(selectedShapeFields.Item(COleVariant(TEXT("Shape"))));
				//得到选取目标的坐标信息
				if(seletedMapLayer.GetShapeType() == 21) //点
				{
					CMoPoint * pPoint = new CMoPoint(); 
					pPoint ->AttachDispatch(selectedShapeField.Get_Value().pdispVal);
					//将得到的坐标信息存储下来
				}
				if(seletedMapLayer.GetShapeType() == 22) //线
				{
					CMoLine * pLine = new CMoLine(); 
					pLine ->AttachDispatch(selectedShapeField.Get_Value().pdispVal);
					//将得到的坐标信息存储下来
				}
				if(seletedMapLayer.GetShapeType() == 23) //面
				{
					CMoPolygon * pPloy = new CMoPolygon(); 
					pPloy ->AttachDispatch(selectedShapeField.Get_Value().pdispVal);
					//将得到的坐标信息存储下来
				}
				
				m_SelectedRecSet.MoveNext();
			}*/
			
		}
		if(m_CurrentOperation == Query_Ellipse && Button ==1)
		{
				//* * 1 获得查询范围
		//	CMoEllipse *ellipse = new CMoEllipse();
		//	ellipse->CreateDispatch("MapObjects2.Ellipse");
			CMoEllipse ellipse(m_map.TrackCircle());
		/*	ellipse->SetBottom(Rect.GetBottom());
			ellipse->SetTop(Rect.GetTop());
			ellipse->SetLeft(Rect.GetLeft());
			ellipse->SetRight(Rect.GetRight());*/
			//* * 2 由查询范围选择目标
			CMoMapLayer seletedMapLayer(layers.Item(COleVariant(m_comboxEdit)));
			CMoRecordset m_SelectedRecSet;
			m_SelectedRecSet = seletedMapLayer.SearchShape(ellipse,6," ");
				//* * 3 得到选取目标的属性信息
			CString resultStr;
			m_SelectedRecSet.MoveFirst();
			while(!m_SelectedRecSet.GetEof())
			{
				CMoTableDesc tableDesc(m_SelectedRecSet.GetTableDesc());
				CMoFields ShapeFields(m_SelectedRecSet.GetFields());
				CMoField ShapeField;
				
				for(int i=0;i< tableDesc.GetFieldCount();i++)
				{
					CString name = tableDesc.GetFieldName(i);
					ShapeField = ShapeFields.Item(COleVariant(name));
					CString value = ShapeField.GetValueAsString();
					resultStr = resultStr + name + ":" + value + "\n";
				}
				//将得到的属性信息存储下来
			
			/*	CMoFields selectedShapeFields(m_SelectedRecSet.GetFields());
				CMoField selectedShapeField(selectedShapeFields.Item(COleVariant(TEXT("Shape"))));
				//得到选取目标的坐标信息
				if(seletedMapLayer.GetShapeType() == 21) //点
				{
					CMoPoint * pPoint = new CMoPoint(); 
					pPoint ->AttachDispatch(selectedShapeField.Get_Value().pdispVal);
					//将得到的坐标信息存储下来
				}
				if(seletedMapLayer.GetShapeType() == 22) //线
				{
					CMoLine * pLine = new CMoLine(); 
					pLine ->AttachDispatch(selectedShapeField.Get_Value().pdispVal);
					//将得到的坐标信息存储下来
				}
				if(seletedMapLayer.GetShapeType() == 23) //面
				{
					CMoPolygon * pPloy = new CMoPolygon(); 
					pPloy ->AttachDispatch(selectedShapeField.Get_Value().pdispVal);
					//将得到的坐标信息存储下来
				}
				*/
				m_SelectedRecSet.MoveNext();
			}
				MessageBox(resultStr);	
		}

	}
}



/*void CFirstMapView::OnMapFullextent() 
{
	// TODO: Add your command handler code here
	m_map.SetMousePointer(4);
	CMoRectangle r(m_map.GetFullExtent());
	if(LPDISPATCH(r))
		m_map.SetExtent(r);	
}*/






void CFirstMapView::OnClickList2(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	POSITION pos = m_list.GetFirstSelectedItemPosition();
	this->index_seled = m_list.GetNextSelectedItem(pos);  // 得到项目索引
	DWORD dwPos = GetMessagePos();
	CPoint point(LOWORD(dwPos),HIWORD(dwPos) );
	m_list.ScreenToClient(&point);

	 LVHITTESTINFO lvinfo;
     lvinfo.pt = point;
     lvinfo.flags = LVHT_ABOVE;

	 UINT nFlag;
     short nItem = m_list.HitTest(point, &nFlag);

	 if(nFlag == LVHT_ONITEMSTATEICON)
	 {
			if(m_list.GetItemState(nItem, LVIS_SELECTED) == LVIS_SELECTED || m_list.GetCheck(nItem))
			{
				CMoMapLayer layer(layers.Item(COleVariant(nItem)));
				layer.SetVisible(false);
				m_map.Refresh();
			}
			else
			{	
				CMoMapLayer layer(layers.Item(COleVariant(nItem)));
				layer.SetVisible(true);
				m_map.Refresh();

			}
	 }

	*pResult = 0;
}

void CFirstMapView::OnRclickList2(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
     NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
     if(pNMListView->iItem != -1)
     {
          DWORD dwPos = GetMessagePos();
          CPoint point( LOWORD(dwPos), HIWORD(dwPos) );
		  CPoint p( LOWORD(dwPos), HIWORD(dwPos));
		  m_list.ScreenToClient(&p);

		  LVHITTESTINFO lvinfo;
		  lvinfo.pt = p;
		  lvinfo.flags = LVHT_ABOVE;

		  UINT nFlag;
		  nItem = m_list.HitTest(p, &nFlag);

          CMenu menu;
          VERIFY( menu.LoadMenu( IDR_MENU1 ) );
          CMenu* popup = menu.GetSubMenu(0);
          ASSERT( popup != NULL );
          popup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this );
     }           
	*pResult = 0;
}

void CFirstMapView::OnMenuRemoveall() 
{
	// TODO: Add your command handler code here
	//得到框架窗口中CCOMBOX控件指针
	CMainFrame* pMainFrame = (CMainFrame*)AfxGetMainWnd();
	ASSERT_VALID(pMainFrame);
	CComboBox *pComboBox = (CComboBox*)pMainFrame->m_wndSearch.GetDlgItem(IDC_COMBO_CURRENTLAYER);
	ASSERT_VALID(pComboBox);
	m_list.DeleteAllItems();
	while(pComboBox->GetCount()!=0)
			pComboBox->DeleteString(0);
	layers.Clear();
	Layers.Clear();
	this->index = 0;
	for(int i=0;i<20;i++)
		this->PathName[i] = "";
}

void CFirstMapView::OnMenuRemove() 
{
	// TODO: Add your command handler code here
	/*	只考虑了选中一个图层的情况
	m_list.DeleteItem(nItem);
	layers.Remove(nItem);
	for(int i=m_list.GetItemCount()-nItem; i<m_list.GetItemCount();i++)
	{
	
		PathName[i] = PathName[i+1];
	}
	this->index--;
	int j =index-1;
	m_list.DeleteAllItems();
	for(i=0;j>=0;i++)
	{
		lvitem.iItem = i;
		m_list.InsertItem(&lvitem);
		m_list.SetItemState (i,0x2000, LVIS_STATEIMAGEMASK);
		m_list.SetItemText(i,0,PathName[j]);
		j--;

	}*/
	int i,istate;
	int nItemSelected = m_list.GetSelectedCount();
	int nItemCout = m_list.GetItemCount();
	if(nItemSelected<1)
		return;
	for(i=nItemCout-1; i>=0; i--)
	{
		istate = m_list.GetItemState(i,LVIS_SELECTED);
		if(istate!=0)
		{
			m_list.DeleteItem(i);
			layers.Remove(i);
			Layers.Remove(i);
			int j=m_list.GetItemCount()-i;
			CString str;
			str = PathName[j];
			CMainFrame* pMainFrame = (CMainFrame*)AfxGetMainWnd();
			ASSERT_VALID(pMainFrame);
			CComboBox *pComboBox = (CComboBox*)pMainFrame->m_wndSearch.GetDlgItem(IDC_COMBO_CURRENTLAYER);
			ASSERT_VALID(pComboBox); 
			int num;
			num = pComboBox->FindString(0,str);
			pComboBox->DeleteString(num);
		
			for(; j<m_list.GetItemCount();j++)
			{
	
				PathName[j] = PathName[j+1];
			}
			this->index--;
		}
	}
	LONG lstyle;
	lstyle = GetWindowLong(m_list.m_hWnd,GWL_STYLE);
	lstyle |= LVS_AUTOARRANGE;
	SetWindowLong(m_list.m_hWnd,GWL_STYLE,lstyle);
}

void CFirstMapView::OnTurnOn() //所有图层都显示
{
	// TODO: Add your command handler code here
	for(short i=0; i<m_list.GetItemCount(); i++)
    {
        m_list.SetItemState(i,0x2000, LVIS_STATEIMAGEMASK);
		CMoMapLayer layer(layers.Item(COleVariant(i)));
		CMoMapLayer Layer(Layers.Item(COleVariant(i)));
		layer.SetVisible(true);
		Layer.SetVisible(true);
    }
	m_map.Refresh();
	m_map2.Refresh();
	
}

void CFirstMapView::OnTurnOff()  //所有图层都不显示
{
	// TODO: Add your command handler code here
	for(short i=0; i<m_list.GetItemCount(); i++)
    {
        //m_list.SetItemState(i,0, LVIS_STATEIMAGEMASK);
		m_list.SetCheck(i,false);
		CMoMapLayer layer(layers.Item(COleVariant(i)));
		CMoMapLayer Layer(Layers.Item(COleVariant(i)));
		layer.SetVisible(false);
		Layer.SetVisible(false);
    }
	m_map.Refresh();
	m_map2.Refresh();
}

void CFirstMapView::OnBegindragList2(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
	// TODO: Add your control notification handler code here
	
	*pResult = 0;
}


void CFirstMapView::OnButtonUp() 
{
	// TODO: Add your command handler code here
	
	
	if (this->index_seled == -1)	  //如果没有选择就返回
	{
		MessageBox("请选择一个图层再上移!","提示",MB_ICONINFORMATION);
		return;  
	}
	
	if (index_seled == 0)  // 判断所选项是否位于行首
	{
		MessageBox("已经位于最上层!","提示",MB_ICONINFORMATION);
		return;
	}
	this->layers.MoveTo(index_seled,index_seled-1);
	this->Layers.MoveTo(index_seled,index_seled-1);
	m_map.Refresh();
	m_map2.Refresh();
	
	CString str;
	int i = m_list.GetItemCount()-index_seled-1;
	str = PathName[i];
	PathName[i] = PathName[i+1];
	PathName[i+1] =str;

	int j =index-1;
	m_list.DeleteAllItems();
	for(i=0;j>=0;i++)
	{
		lvitem.iItem = i;
		m_list.InsertItem(&lvitem);
		m_list.SetItemState (i,0x2000, LVIS_STATEIMAGEMASK);
		m_list.SetItemText(i,0,PathName[j]);
		j--;
	}
	index_seled--;

	/*// 提取所选行的内容
	CString str1;
	str1 = m_list.GetItemText(index_seled,0);
	
	
	// 删除所选列表项
	m_list.DeleteItem(index_seled);
	
	// 在m_nIndex-1位置处插入上面所删列表项的各列类容	
	m_list.InsertItem(index_seled-1, str1);
	index_seled--;

⌨️ 快捷键说明

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