📄 mainfrm.cpp
字号:
pTreeCtrl->DeleteItem(scdPrtItem);
}
else
{
// 删除该项
pTreeCtrl->DeleteItem(scdPrtItem);
}
// 设置Check状态
pTreeCtrl->SetCheck(scdPrtItem, TRUE);
// 将游标移动到下一条记录
rd.MoveNext();
delete aIndex;
aIndex = NULL;
}
// 关闭数据表
rd.Close();
// 将游标移动到下一条记录
rs.MoveNext();
pTreeCtrl->Expand(frtPrtItem,TVE_EXPAND);
pTreeCtrl->SetCheck(frtPrtItem, TRUE);
}
// 展开该项
pTreeCtrl->Expand(parentItem, TVE_EXPAND);
// 设置Check状态
pTreeCtrl->SetCheck(parentItem, TRUE);
}
catch (CDaoException* e)
{
DisplayDaoException(e);
delete tmpDB;
e->Delete();
return FALSE;
}
if(tmpDB)
{
if(tmpDB->IsOpen())
{
// 关闭与数据库的连接
tmpDB->Close();
}
delete tmpDB;
tmpDB = NULL;
}
return TRUE;
}
//----------------------------------------------------------------------------------------------
int CMainFrame::GetNodeArray2(int* aIndex, CString szType, CString szSubType)
{
int nCount = 0;
for (int i = 0; i < m_environment.m_nLayerNum; i ++)
{
if (m_environment.m_layerInfos[i].szType == szType
&& m_environment.m_layerInfos[i].szSubType == szSubType)
{
aIndex[nCount] = i;
nCount ++;
}
}
return nCount;
}
//----------------------------------------------------------------------------------------------
// 功能:重新设置树状列表上的内容
// 返回值:无
// 说明:如按学校分布快捷键后,调用此函数以保证图层树状列表的内容
void CMainFrame::ReloadLayerCtrlView()
{
CMapControlView* pMapCtrlView = (CMapControlView*)m_wndSplitter2.GetPane(0,0);
CTreeCtrl* pCtrl = &(pMapCtrlView->m_LayerTreeView);
// 得到第1层
HTREEITEM hCurrent = pCtrl->GetNextItem(NULL, TVGN_CHILD);
while (hCurrent != NULL)
{
// 得到第2层
HTREEITEM hSecCurrent = pCtrl->GetNextItem(hCurrent, TVGN_CHILD);
while(hSecCurrent)
{
// 得到第3层
HTREEITEM hThrCurrent = pCtrl->GetNextItem(hSecCurrent, TVGN_CHILD);
while(hThrCurrent)
{
bool bVisible3 = false;
// 得到第4层
HTREEITEM hFthCurrent = pCtrl->GetNextItem(hThrCurrent, TVGN_CHILD);
while(hFthCurrent)
{
TVITEM item;
TCHAR szText[1024];
item.hItem = hFthCurrent;
item.mask = TVIF_TEXT | TVIF_HANDLE;
item.pszText = szText;
item.cchTextMax = 1024;
BOOL bWorked = pCtrl->GetItem(&item);
if(bWorked)
{
int index = m_environment.GetLayerIndexByName(item.pszText);
if (index >= 0)
{
BOOL bChecked = m_environment.m_layerInfos[index].bVisible;
pCtrl->SetCheck(item.hItem, bChecked);
if (pCtrl->GetCheck(item.hItem))
bVisible3 = true;
}
}
// 得到第4层的下一个节点
hFthCurrent = pCtrl->GetNextItem(hFthCurrent, TVGN_NEXT);
}
pCtrl->SetCheck(hThrCurrent, bVisible3);
// 得到第3层的下一个节点
hThrCurrent = pCtrl->GetNextItem(hThrCurrent, TVGN_NEXT);
}
// 得到第2层的下一个节点
hSecCurrent = pCtrl->GetNextItem(hSecCurrent, TVGN_NEXT);
}
// 得到第1层的下一个节点
hCurrent = pCtrl->GetNextItem(hCurrent, TVGN_NEXT);
}
}
//----------------------------------------------------------------------------------------------
// 功能:定位指定地名的位置
// 参数:CString szName 地名名称
void CMainFrame::Position(CString szName)
{
CNameGisView* pMapView = (CNameGisView*)(m_wndSplitter.GetPane(0,0));
CHawkView* pHawkView = (CHawkView*)(m_wndSplitter2.GetPane(1,0));
m_environment.m_drawLine = NULL;
m_environment.m_buses = NULL;
m_environment.m_selectedFeature = NULL;
m_environment.m_selectedSymbol = NULL;
for (int i = 0; i<m_environment.m_nLayerNum; i ++)
m_environment.m_layerInfos[i].rsSel = NULL;
CMoRecordset rs = NULL;
//公交路线
if (m_environment.IsBusLine(szName))
{
CMoMapLayer ly = m_environment.GetLayerByName("公交线路");
rs = ly.SearchExpression("名称 like '"+szName +"'");;
if (rs)
{
rs.MoveFirst();
if (!rs.GetEof())
{
CMoPoint pt;
CMoLine line(rs.GetFields().Item(COleVariant("shape")).GetValue().pdispVal);
pt = line.GetExtent().GetCenter();
if (!IsWithin(pMapView->m_Map.GetExtent(), pt))
{
pMapView->m_Map.CenterAt(pt.GetX(), pt.GetY());
}
// 公交路线
// 设置pMainWnd->m_environment.m_drawLine和pMainWnd->m_environment.m_buses
CMoPoints pts;
pts = line.GetParts().Item(COleVariant(long(0), VT_I4));
if(m_environment.m_drawLine)
{
for(int i=0; i<m_environment.m_nSelectedLineNum; i++)
{
if(m_environment.m_drawLine[i].pPoint)
{
delete m_environment.m_drawLine[i].pPoint;
m_environment.m_drawLine[i].pPoint = NULL;
}
}
delete m_environment.m_drawLine;
m_environment.m_drawLine = NULL;
}
m_environment.m_nSelectedLineNum = 1;
m_environment.m_drawLine = new MLine[1];
m_environment.m_drawLine[0].nPointNumber = pts.GetCount();
m_environment.m_drawLine[0].pPoint = new MPoint[pts.GetCount()];
for (long i = 0; i<pts.GetCount(); i ++)
{
pt = pts.Item(COleVariant(i, VT_I4));
m_environment.m_drawLine[0].pPoint[i].x = pt.GetX();
m_environment.m_drawLine[0].pPoint[i].y = pt.GetY();
}
if(m_environment.m_buses)
{
delete m_environment.m_buses;
m_environment.m_buses = NULL;
}
m_environment.m_buses = new Buses();
int nCount = 0;
if ( !m_environment.GetStation(szName, m_environment.m_buses, &nCount))
m_environment.m_buses = NULL;
else
m_environment.m_buses->nNum = nCount;
CMoFields fields(rs.GetFields());
CMoField shapeField(fields.Item(COleVariant("Shape")));
pMapView->m_Map.FlashShape(shapeField.GetValue().pdispVal, 4);
pMapView->m_Map.SetExtent(pMapView->m_Map.GetExtent());
pHawkView->m_HawkMap.SetExtent(pHawkView->m_HawkMap.GetExtent());
}
}
return;
}
CString szLayer = m_environment.GetLayerName(szName,"地名索引");
CString szTable = m_environment.GetTableName(szName,"地名索引");
if ("" == szTable)
{
AfxMessageBox("属性库中无此地名!");
return;
}
int nIndex = m_environment.GetLayerIndexByName(szTable);
if (nIndex < 0)
return;
// 车站的定位
if (m_environment.IsStation(szName))
{
CMoMapLayer ly = m_environment.m_layerInfos[nIndex].layer;
rs = ly.SearchExpression("名称 like '" + szName + "'");
if (rs)
{
rs.MoveFirst();
if (!rs.GetEof())
{
CMoPoint pt(rs.GetFields().Item(COleVariant("shape")).GetValue().pdispVal);
if (!IsWithin(pMapView->m_Map.GetExtent(), pt))
{
pMapView->m_Map.CenterAt(pt.GetX(), pt.GetY());
}
if (m_environment.m_layerInfos[nIndex].nCharacterIndex >= 0
&& m_environment.m_layerInfos[nIndex].layer.GetShapeType() == moShapeTypePoint)
{
m_environment.m_selectedSymbol.CreateDispatch(_T("MapObjects2.Symbol"));
m_environment.m_selectedSymbol.SetSymbolType(moPointSymbol);
m_environment.m_selectedSymbol.GetFont().SetName(m_environment.m_layerInfos[nIndex].szFontName);
m_environment.m_selectedSymbol.SetStyle(4);
m_environment.m_selectedSymbol.SetSize(m_environment.m_layerInfos[nIndex].layer.GetSymbol().GetSize());
m_environment.m_selectedSymbol.SetCharacterIndex(m_environment.m_layerInfos[nIndex].nCharacterIndex);
m_environment.m_selectedSymbol.SetColor(0xff);
m_environment.m_selectedSymbolSize = (short)m_environment.m_layerInfos[nIndex].nSymSize;
m_environment.m_selectedScale = m_environment.m_layerInfos[nIndex].dScale;
}
else
{
if (m_environment.m_layerInfos[nIndex].layer.GetShapeType() == moShapeTypePoint)
{
m_environment.m_selectedSymbol.CreateDispatch(_T("MapObjects2.Symbol"));
m_environment.m_selectedSymbol.SetSymbolType(m_environment.m_layerInfos[nIndex].layer.GetSymbol().GetSymbolType());
m_environment.m_selectedSymbol.SetStyle(m_environment.m_layerInfos[nIndex].layer.GetSymbol().GetStyle());
m_environment.m_selectedSymbol.SetSize(m_environment.m_layerInfos[nIndex].layer.GetSymbol().GetSize());
m_environment.m_selectedSymbol.SetColor(0xff);
m_environment.m_selectedSymbolSize = (short)m_environment.m_layerInfos[nIndex].nSymSize;
m_environment.m_selectedScale = m_environment.m_layerInfos[nIndex].dScale;
}
else
m_environment.m_selectedSymbol = NULL;
}
m_environment.m_selectedFeature = rs.GetFields().Item(COleVariant("shape")).GetValue().pdispVal;
pMapView->m_Map.FlashShape(rs.GetFields().Item(COleVariant("shape")).GetValue().pdispVal, 4);
pMapView->m_Map.SetExtent(pMapView->m_Map.GetExtent());
pHawkView->m_HawkMap.SetExtent(pHawkView->m_HawkMap.GetExtent());
}
}
return;
}
if (!m_environment.m_layerInfos[nIndex].bVisible)
{
AfxMessageBox(m_environment.m_layerInfos[nIndex].szName + "所在的图层不可见!");
return;
}
CString szFieldName = "名称";
rs = m_environment.m_layerInfos[nIndex].layer.SearchExpression(szFieldName + " like '" + szName + "'");
if (rs)
{
rs.MoveFirst();
if (!rs.GetEof())
{
CMoPoint pt;
switch (m_environment.m_layerInfos[nIndex].layer.GetShapeType())
{
case moShapeTypePoint:
{
pt = rs.GetFields().Item(COleVariant("shape")).GetValue().pdispVal;
}
break;
case moShapeTypeLine:
{
CMoLine line(rs.GetFields().Item(COleVariant("shape")).GetValue().pdispVal);
pt = line.GetExtent().GetCenter();
}
break;
case moShapeTypePolygon:
{
CMoPolygon poly(rs.GetFields().Item(COleVariant("shape")).GetValue().pdispVal);
pt = poly.GetExtent().GetCenter();
}
break;
}
pMapView->m_Map.CenterAt(pt.GetX(), pt.GetY());
pHawkView->m_HawkMap.SetExtent(pHawkView->m_HawkMap.GetExtent());
pMapView->m_Map.FlashShape(rs.GetFields().Item(COleVariant("shape")).GetValue().pdispVal, 4);
if (m_environment.m_layerInfos[nIndex].nCharacterIndex >= 0
&& m_environment.m_layerInfos[nIndex].layer.GetShapeType() == moShapeTypePoint)
{
m_environment.m_selectedSymbol.CreateDispatch(_T("MapObjects2.Symbol"));
m_environment.m_selectedSymbol.SetSymbolType(moPointSymbol);
m_environment.m_selectedSymbol.GetFont().SetName(m_environment.m_layerInfos[nIndex].szFontName);
m_environment.m_selectedSymbol.SetStyle(4);
m_environment.m_selectedSymbol.SetSize(m_environment.m_layerInfos[nIndex].nSymSize);
m_environment.m_selectedSymbol.SetCharacterIndex(m_environment.m_layerInfos[nIndex].nCharacterIndex);
m_environment.m_selectedSymbol.SetColor(0xff);
m_environment.m_selectedSymbolSize = (short)m_environment.m_layerInfos[nIndex].nSymSize;
m_environment.m_selectedScale = m_environment.m_layerInfos[nIndex].dScale;
}
else
{
if (m_environment.m_layerInfos[nIndex].layer.GetShapeType() == moShapeTypePoint)
{
m_environment.m_selectedSymbol.CreateDispatch(_T("MapObjects2.Symbol"));
m_environment.m_selectedSymbol.SetSymbolType(m_environment.m_layerInfos[nIndex].layer.GetSymbol().GetSymbolType());
m_environment.m_selectedSymbol.SetStyle(m_environment.m_layerInfos[nIndex].layer.GetSymbol().GetStyle());
m_environment.m_selectedSymbol.SetSize(m_environment.m_layerInfos[nIndex].nSymSize);
m_environment.m_selectedSymbol.SetColor(0xff);
m_environment.m_selectedSymbolSize = (short)m_environment.m_layerInfos[nIndex].nSymSize;
m_environment.m_selectedScale = m_environment.m_layerInfos[nIndex].dScale;
}
else
m_environment.m_selectedSymbol = NULL;
}
m_environment.m_selectedFeature = rs.GetFields().Item(COleVariant("shape")).GetValue().pdispVal;
pMapView->m_Map.SetExtent(pMapView->m_Map.GetExtent());
}
else
{
AfxMessageBox("电子地图上没有这个单位。");
}
}
}
//----------------------------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -