📄 firstmapview.cpp
字号:
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 + -