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