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

📄 mainfrm.cpp

📁 程序编写环境为Visual Studio.NET 2002
💻 CPP
📖 第 1 页 / 共 3 页
字号:
						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 + -