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

📄 mainfrm.cpp

📁 程序编写环境为Visual Studio.NET 2002
💻 CPP
📖 第 1 页 / 共 3 页
字号:
			if (var.vt != VT_NULL)
			{
				m_environment.m_layerInfos[nIdx].szSubType3
					= CCrack::strVARIANT(var);
			}
			else
			{
				m_environment.m_layerInfos[nIdx].szSubType3 = "";
			}
            
			var = rs.GetFieldValue("注记比例尺");
			if (var.vt != VT_NULL)
			{				
				m_environment.m_layerInfos[nIdx].dScale
					= atof(CCrack::strVARIANT(var));
			}
			else
			{
				m_environment.m_layerInfos[nIdx].dScale = 999999999;
			}
            
			var = rs.GetFieldValue("显示比例尺");
			if (var.vt != VT_NULL)
			{				
				m_environment.m_layerInfos[nIdx].dShowScale
					= atof(CCrack::strVARIANT(var));
			}
			else
			{
				m_environment.m_layerInfos[nIdx].dShowScale = 999999999;
			}
           
			var = rs.GetFieldValue("符号索引");
			if (var.vt != VT_NULL)
			{				
				m_environment.m_layerInfos[nIdx].nCharacterIndex
					= atoi(CCrack::strVARIANT(var));
			}
			else
			{
				m_environment.m_layerInfos[nIdx].nCharacterIndex = -1;
			}
            				
			var = rs.GetFieldValue("注记大小");
			if (var.vt != VT_NULL)
			{
				m_environment.m_layerInfos[nIdx].nFontSize
					= atoi(CCrack::strVARIANT(var));
			}
			else
			{
				m_environment.m_layerInfos[nIdx].nFontSize = 10;
			}
            
			var = rs.GetFieldValue("字体名称");
			if (var.vt != VT_NULL)
			{				
				m_environment.m_layerInfos[nIdx].szFontName
					= CCrack::strVARIANT(var) ;
			}
			else
			{
				m_environment.m_layerInfos[nIdx].szFontName = "";
			}
            
			var = rs.GetFieldValue("符号大小");
			if (var.vt != VT_NULL)
			{				
				m_environment.m_layerInfos[nIdx].nSymSize
					= atoi(CCrack::strVARIANT(var));
			}
			else
			{
				m_environment.m_layerInfos[nIdx].nSymSize = 4;
			}
            
			var = rs.GetFieldValue("符号颜色");
			if (var.vt != VT_NULL)
			{				
				int nColor = atoi(CCrack::strVARIANT(var));
				m_environment.m_layerInfos[nIdx].nSymColor = (UINT)nColor;
			}
			else
			{
				m_environment.m_layerInfos[nIdx].nSymColor
					= m_environment.SYMBOL_COLOR_NONE;
			}
            
			var = rs.GetFieldValue("字段名");
			if (var.vt != VT_NULL)
			{
				m_environment.m_layerInfos[nIdx].szFieldName
					= CCrack::strVARIANT(var);
			}
			else
				m_environment.m_layerInfos[nIdx].szFieldName = "单位名称";
            
			if (m_environment.m_layerInfos[nIdx].szLayerName == "公交车站")
			{
				m_environment.m_szfntStation
					=  m_environment.m_layerInfos[nIdx].szFontName;
				m_environment.m_chStation
					= (char)m_environment.m_layerInfos[nIdx].nCharacterIndex; 
				m_environment.m_nfntStation
					= m_environment.m_layerInfos[nIdx].nFontSize; 
			}
            
			// 将游标移动到下一条记录
			rs.MoveNext();
			nIdx ++;
		}

		// 关闭数据表
		rs.Close();
	}
	catch (CDaoException* e)
	{
		DisplayDaoException(e);
		delete tmpDB;
		e->Delete();
		return FALSE;
	}
    
    if(tmpDB)
	{
		if(tmpDB->IsOpen())
		{
			// 关闭与数据库的连接
			tmpDB->Close();
		}

		// 释放内存资源
		delete tmpDB;
		tmpDB = NULL;
	}

	return TRUE;
}
//----------------------------------------------------------------------------------------------
// 初始化地图列表框
void CMainFrame::InitialMapIndex()
{
	TV_INSERTSTRUCT curTreeItem, childTreeItem;
	CString strTemp;	
	m_pImageList = new CImageList();
	m_pImageList->Create(16, 16, ILC_MASK, 1, 1);
	CBitmap             bitmap;
	bitmap.LoadBitmap(IDC_BITMAP_MAP);
	m_pImageList->Add(&bitmap, (COLORREF)0xFFFFFF);
	bitmap.DeleteObject();

	// 通过m_wndSplitter2的GetPane函数得到地图控制视图
	CMapControlView* pMapCtrlView;
	pMapCtrlView = (CMapControlView*)m_wndSplitter2.GetPane(0,0);	
	CTreeCtrl* pTreeCtrl = &(pMapCtrlView->m_MapIndexTreeView);
	// 设置树状列表框的图象集合
	pTreeCtrl->SetImageList(m_pImageList, TVSIL_NORMAL);
	
	// 对地图集合中的每个地图进行循环
	for (int i = 0; i <m_environment.m_nMapNum; i ++  )
	{
		curTreeItem.hParent = NULL;
		curTreeItem.hInsertAfter = TVI_ROOT;		
		strTemp = m_environment.m_mapInfos[i].szName;
		curTreeItem.item.pszText = strTemp.GetBuffer(strTemp.GetLength());
		curTreeItem.item.iImage = 0;
		curTreeItem.item.mask = TVIF_IMAGE  | TVIF_TEXT;		
		HTREEITEM parentItem = pTreeCtrl->InsertItem(&curTreeItem);

		// 调用LoadIndexInfos函数得到当前地图中区域分块索引信息
		((CMainFrame*)AfxGetMainWnd())->LoadIndexInfos(i);
		for (int j = 0; j < m_environment.m_nIndexNum; j ++)
		{
			childTreeItem.hParent = parentItem;
			childTreeItem.hInsertAfter = TVI_LAST;
			strTemp = m_environment.m_indexInfos[j].szName;
			childTreeItem.item.pszText = strTemp.GetBuffer(strTemp.GetLength());
			childTreeItem.item.iImage = 0;
			childTreeItem.item.mask = TVIF_IMAGE | TVIF_TEXT;
			pTreeCtrl->InsertItem(&childTreeItem);
		}

		pTreeCtrl->Expand(parentItem,TVE_EXPAND);
	}
}
//----------------------------------------------------------------------------------------------
// 得到指定索引的地图中区域分块索引信息
//  参数nIndex是需要设置索引信息的地图在地图集合中的索引
BOOL CMainFrame::LoadIndexInfos(int nIndex)
{
	// 得到指定索引的区域对应的名称
	CString szIndexTable = m_environment.m_mapInfos[nIndex].szIndexTable;

	CDaoDatabase* tmpDB = new CDaoDatabase;
	try
	{
		// 建立与数据库的连接
		tmpDB->Open(m_environment.m_szDBName);
	}
	catch (CDaoException* e)
	{
		DisplayDaoException(e);
		delete tmpDB;
		e->Delete();
		return FALSE;
	}

	CDaoRecordset rs(tmpDB);
	try
	{
		int nIndex = 0;
		CString strSelect(_T("Select * From ["));
		strSelect += szIndexTable;
		strSelect += _T("]");
		rs.Open(dbOpenDynaset,strSelect);
		int nRecordCount = 0;
		while(!rs.IsEOF())
		{
			nRecordCount ++;
			rs.MoveNext();
		}
		rs.MoveFirst();
		m_environment.m_nIndexNum = nRecordCount;
		m_environment.m_indexInfos  = NULL;
		m_environment.m_indexInfos  = new IndexInfo[m_environment.m_nIndexNum]; 
        
		int nIdx = 0;
		while(!rs.IsEOF())
		{
			COleVariant var;
			var = rs.GetFieldValue("名称");
			m_environment.m_indexInfos[nIdx].szName = CCrack::strVARIANT(var);			
			var = rs.GetFieldValue("Y1");
			m_environment.m_indexInfos[nIdx].m_extent.CreateDispatch(_T("MapObjects2.Rectangle"));
			m_environment.m_indexInfos[nIdx].m_extent.SetTop(atof(CCrack::strVARIANT(var))); 
			var = rs.GetFieldValue("Y2");
			m_environment.m_indexInfos[nIdx].m_extent.SetBottom(atof(CCrack::strVARIANT(var)));
			var = rs.GetFieldValue("X2");
			m_environment.m_indexInfos[nIdx].m_extent.SetRight(atof(CCrack::strVARIANT(var)));
			var = rs.GetFieldValue("X1");
			m_environment.m_indexInfos[nIdx].m_extent.SetLeft(atof(CCrack::strVARIANT(var)));
			
			nIdx ++;
			// 将游标移动到下一条记录
			rs.MoveNext();
		}

		// 关闭数据表
		rs.Close();
	}
	catch (CDaoException* e)
	{
		DisplayDaoException(e);
		tmpDB->Close();
		delete tmpDB;
		e->Delete();
		return FALSE;
	}

	if(tmpDB)
	{
		if(tmpDB->IsOpen())
		{
			// 关闭与数据库的连接
			tmpDB->Close();
		}

		delete tmpDB;
		tmpDB = NULL;
	}

	return TRUE;
}
//----------------------------------------------------------------------------------------------
//初始化图层列表面板中树状列表框控件
BOOL CMainFrame::InitialLayerCtrlView()
{
	// 通过m_wndSplitter2的GetPane函数得到地图控制视图
	CMapControlView* pMapCtrlView = (CMapControlView*)m_wndSplitter2.GetPane(0,0);	
	CTreeCtrl* pTreeCtrl = &(pMapCtrlView->m_LayerTreeView);
	TV_INSERTSTRUCT curTreeItem, frtTreeItem, scdTreeItem, thdTreeItem;
	CString strFirst, strTemp;
	COleVariant var;

	pTreeCtrl->ModifyStyle( TVS_CHECKBOXES, 0 );
	pTreeCtrl->ModifyStyle( 0, TVS_CHECKBOXES );

	curTreeItem.hParent = NULL;
	curTreeItem.hInsertAfter = TVI_ROOT;
	strTemp = "北京市图层集";
	curTreeItem.item.pszText = strTemp.GetBuffer(strTemp.GetLength());
	curTreeItem.item.mask = TVIF_TEXT;	
	// 插入父项
	HTREEITEM parentItem = pTreeCtrl->InsertItem(&curTreeItem);

	CDaoDatabase* tmpDB = new CDaoDatabase;
	try
	{
		tmpDB->Open(m_environment.m_szDBName);
	}
	catch (CDaoException* e)
	{
		DisplayDaoException(e);
		delete tmpDB;
		e->Delete();
		return FALSE;
	}

	CDaoRecordset rs(tmpDB);
	try
	{
		int nIndex = 0;
		CString strSelect(_T("Select * From 地名类型"));
		rs.Open(dbOpenDynaset,strSelect);

		while(!rs.IsEOF())
		{
			//加第1层
			var = rs.GetFieldValue("大类");
			strFirst = CCrack::strVARIANT(var);
			frtTreeItem.hParent = parentItem;
			frtTreeItem.hInsertAfter = TVI_LAST;			
			frtTreeItem.item.pszText = strFirst.GetBuffer(strTemp.GetLength());
			frtTreeItem.item.mask = TVIF_HANDLE | TVIF_TEXT;
			HTREEITEM frtPrtItem = pTreeCtrl->InsertItem(&frtTreeItem);

			//加第2层
			CDaoRecordset rd(tmpDB);
			CString strQuery(_T("Select * From 地名中类型 where 大类='"));
			strQuery += strFirst;
			strQuery += _T("'");
			rd.Open(dbOpenDynaset, strQuery);			

			while(!rd.IsEOF())
			{
				var = rd.GetFieldValue("中类");
				strTemp = CCrack::strVARIANT(var);
				scdTreeItem.hParent = frtPrtItem;
				scdTreeItem.hInsertAfter = TVI_LAST;
				scdTreeItem.item.pszText = strTemp.GetBuffer(strTemp.GetLength());
				scdTreeItem.item.mask = TVIF_TEXT;
				HTREEITEM scdPrtItem = pTreeCtrl->InsertItem(&scdTreeItem);

				int* aIndex = new int[m_environment.m_nLayerNum];
				// 调用GetNodeArray2函数得到包含多少个子项
				int nCount = GetNodeArray2(aIndex, strFirst, strTemp);
				//加第3层
				if(nCount>0)
				{
					int count = 0;
					for (int j = 0; j < nCount; j ++)
					{
						strTemp = m_environment.m_layerInfos[aIndex[j]].szName;
						thdTreeItem.hParent = scdPrtItem;
						thdTreeItem.hInsertAfter = TVI_LAST;
						thdTreeItem.item.pszText = strTemp.GetBuffer(strTemp.GetLength());
						thdTreeItem.item.mask = TVIF_TEXT;

						if (m_environment.m_layerInfos[aIndex[j]].bCanControl)
						{
							HTREEITEM thdPrtItem = pTreeCtrl->InsertItem(&thdTreeItem);
							count ++;
							if (m_environment.m_layerInfos[aIndex[j]].bVisible)
								pTreeCtrl->SetCheck(thdPrtItem, TRUE);
							else
								pTreeCtrl->SetCheck(thdPrtItem, FALSE);
						}
					}

					if(count == 0)

⌨️ 快捷键说明

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