?? 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 + -