另外几个函数代码如下:
// 获取所有图层
BOOL CLayerManageDlg::GetAllLayer()
{
if(m_ipMapControl == NULL) return FALSE;
long lLayerCount=0;
m_ipMapControl->get_LayerCount(&lLayerCount);
CString szLayersName;
int iIndex=0;
for(long i=0;i<lLayerCount;i++)
{
ILayerPtr ipLayer;
m_ipMapControl->get_Layer(i,&ipLayer);
if(ipLayer)
{
BSTR bstrLayerName;
ipLayer->get_Name(&bstrLayerName);
VARIANT_BOOL bVisible=FALSE;
ipLayer->get_Visible(&bVisible);
szLayersName = bstrLayerName;
::SysFreeString(bstrLayerName);
m_listLayer.InsertItem(iIndex,szLayersName,0);
m_listLayer.SetCheck(iIndex,bVisible);
iIndex++;
}
}
return TRUE;
}
// 刷新地图显示
void CLayerManageDlg::RefreshMap()
{
IActiveViewPtr ipActiveView;
HRESULT hr=m_ipMapControl->get_ActiveView(&ipActiveView);
if(ipActiveView != NULL)
{
ipActiveView->Refresh();
}
}
// 上移图层
void CLayerManageDlg::OnBtnUp()
{
int iCurSel = m_listLayer.GetSelectionMark();
if(iCurSel<=0) return;
IMapPtr ipMap;
HRESULT hr = m_ipMapControl->get_Map(&ipMap);
if (FAILED(hr)) return ;
ILayerPtr ipLayer;
hr = ipMap->get_Layer(iCurSel,&ipLayer);
if (FAILED(hr)) return ;
hr = ipMap->MoveLayer(ipLayer,iCurSel-1);
if (FAILED(hr)) return ;
RefreshMap();
CString szLayerName = m_listLayer.GetItemText(iCurSel,0);
BOOL bVisiable = m_listLayer.GetCheck(iCurSel);
m_listLayer.DeleteItem(iCurSel);
int iNewItem = m_listLayer.InsertItem(iCurSel-1,szLayerName,0);
m_listLayer.SetCheck(iNewItem,bVisiable);
}
// 下移图层
void CLayerManageDlg::OnBtnDown()
{
int iCurSel = m_listLayer.GetSelectionMark();
if(iCurSel>=m_listLayer.GetItemCount()-1) return;
IMapPtr ipMap;
HRESULT hr = m_ipMapControl->get_Map(&ipMap);
if (FAILED(hr)) return ;
ILayerPtr ipLayer;
hr = ipMap->get_Layer(iCurSel,&ipLayer);
if (FAILED(hr)) return ;
hr = ipMap->MoveLayer(ipLayer,iCurSel+1);
if (FAILED(hr)) return ;
RefreshMap();
CString szLayerName = m_listLayer.GetItemText(iCurSel,0);
BOOL bVisiable = m_listLayer.GetCheck(iCurSel);
m_listLayer.DeleteItem(iCurSel);
int iNewItem = m_listLayer.InsertItem(iCurSel+1,szLayerName,0);
m_listLayer.SetCheck(iNewItem,bVisiable);
}