📄 mainfrm.cpp
字号:
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 + -