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

📄 mainfrm.cpp

📁 公交查询系统源代码 是武汉的 提供简单的查询和乘车方案 vc++
💻 CPP
📖 第 1 页 / 共 3 页
字号:

	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 += szMetaTable;
		strSelect += _T("] Where 存在 = true Order By 显示次序1,显示次序2,id");
		// 打开元数据表
		rs.Open(dbOpenDynaset,strSelect);
   
		m_environment.m_nLayerNum = rs.GetRecordCount();
		m_environment.m_layerInfos = NULL;
		m_environment.m_layerInfos = new LayerInfo[m_environment.m_nLayerNum]; 
		
		int nIdx = 0;
		// 循环访问各条记录
		while(!rs.IsEOF())
		{
			COleVariant var;
			var = rs.GetFieldValue("名称");
			m_environment.m_layerInfos[nIdx].szName = CCrack::strVARIANT(var);
			var = rs.GetFieldValue("大类");
			m_environment.m_layerInfos[nIdx].szType = CCrack::strVARIANT(var);
			var = rs.GetFieldValue("图形文件");
			m_environment.m_layerInfos[nIdx].szFileName
				= CCrack::strVARIANT(var); 
			var = rs.GetFieldValue("中类");
			m_environment.m_layerInfos[nIdx].szSubType = CCrack::strVARIANT(var);
			var = rs.GetFieldValue("属性表名");
			m_environment.m_layerInfos[nIdx].szTableName
				= CCrack::strVARIANT(var); 
			var = rs.GetFieldValue("图层名");
			m_environment.m_layerInfos[nIdx].szLayerName
				= CCrack::strVARIANT(var);
			var = rs.GetFieldValue("显示");
			m_environment.m_layerInfos[nIdx].bVisible = CCrack::boolVARIANT(var); 
			var = rs.GetFieldValue("注记");
			m_environment.m_layerInfos[nIdx].bLable = CCrack::boolVARIANT(var); 
			var = rs.GetFieldValue("选择");
			m_environment.m_layerInfos[nIdx].bCanSelected
				= CCrack::boolVARIANT(var); 
			var = rs.GetFieldValue("控制");
			m_environment.m_layerInfos[nIdx].bCanControl
				= CCrack::boolVARIANT(var); 
			var = rs.GetFieldValue("地物");
			m_environment.m_layerInfos[nIdx].bBackground
				= CCrack::boolVARIANT(var); 
            
			var = rs.GetFieldValue("小类");
			if (var.vt != VT_NULL)
			{				
				m_environment.m_layerInfos[nIdx].szSubType2
					= CCrack::strVARIANT(var);
			}
			else
			{
				m_environment.m_layerInfos[nIdx].szSubType2 = "";
			}
          
            
			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;
	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;

⌨️ 快捷键说明

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