📄 mapcontrolview.cpp
字号:
// MapControlView.cpp : implementation file
//
#include "stdafx.h"
#include "NameGis.h"
#include "MapControlView.h"
#include "MainFrm.h"
#include "NameGisView.h"
#include "AppApi.h"
#include "HawkView.h"
#include "MoFields.h"
#include "MoField.h"
#include "MoPoint.h"
#include "ContentDlg.h"
// CMapControlView
IMPLEMENT_DYNCREATE(CMapControlView, CFormView)
CMapControlView::CMapControlView()
: CFormView(CMapControlView::IDD)
{
}
CMapControlView::~CMapControlView()
{
}
void CMapControlView::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
DDX_Control(pDX, IDC_TAB_WORKSPACE, m_OperaTab);
DDX_Control(pDX, IDC_MAPINDEX, m_MapIndexTreeView);
DDX_Control(pDX, IDC_LAYERCONTROLTREE, m_LayerTreeView);
DDX_Control(pDX, IDC_LIST_RESULT, m_ResultListBox);
DDX_Control(pDX, IDC_BUTTON_CONTENT, m_ContentBtn);
DDX_Control(pDX, IDC_BUTTON_POSITING, m_PositingBtn);
}
BEGIN_MESSAGE_MAP(CMapControlView, CFormView)
ON_NOTIFY(TCN_SELCHANGE, IDC_TAB_WORKSPACE, OnTcnSelchangeTabWorkspace)
ON_NOTIFY(TVN_SELCHANGED, IDC_LAYERCONTROLTREE, OnTvnSelchangedLayercontroltree)
ON_NOTIFY(TVN_SELCHANGED, IDC_MAPINDEX, OnTvnSelchangedMapindex)
ON_BN_CLICKED(IDC_BUTTON_CONTENT, OnBnClickedButtonContent)
ON_BN_CLICKED(IDC_BUTTON_POSITING, OnBnClickedButtonPositing)
END_MESSAGE_MAP()
// CMapControlView diagnostics
#ifdef _DEBUG
void CMapControlView::AssertValid() const
{
CFormView::AssertValid();
}
void CMapControlView::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}
#endif //_DEBUG
// CMapControlView message handlers
//-----------------------------------------------------------------------------------------
void CMapControlView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
// 在选项卡控件中加入3个面板
TC_ITEM TabCtrlItem;
TabCtrlItem.mask = TCIF_TEXT;
TabCtrlItem.pszText = "地图索引";
m_OperaTab.InsertItem( 0, &TabCtrlItem );
TabCtrlItem.pszText = "图层控制";
m_OperaTab.InsertItem( 1, &TabCtrlItem );
TabCtrlItem.pszText = "查询结果";
m_OperaTab.InsertItem( 2, &TabCtrlItem );
m_LayerTreeView.ModifyStyle(WS_VISIBLE, 0, 0); // 隐藏
m_ResultListBox.ModifyStyle(WS_VISIBLE, 0, 0); // 隐藏
m_ContentBtn.ModifyStyle(WS_VISIBLE, 0, 0); // 隐藏
m_PositingBtn.ModifyStyle(WS_VISIBLE, 0, 0); // 隐藏
}
//-----------------------------------------------------------------------------------------
void CMapControlView::OnTcnSelchangeTabWorkspace(NMHDR *pNMHDR,
LRESULT *pResult)
{
*pResult = 0;
// 获得当前选择的面板的索引值
int nTabIndex = m_OperaTab.GetCurSel();
switch(nTabIndex)
{
case 0:
// 如果选择的是“地图索引”面板
m_MapIndexTreeView.ModifyStyle(0, WS_VISIBLE, 0); // 显示
m_LayerTreeView.ModifyStyle(WS_VISIBLE, 0, 0); // 隐藏
m_ResultListBox.ModifyStyle(WS_VISIBLE, 0, 0); // 隐藏
m_ContentBtn.ModifyStyle(WS_VISIBLE, 0, 0); // 隐藏
m_PositingBtn.ModifyStyle(WS_VISIBLE, 0, 0); // 隐藏
Invalidate(TRUE); // 刷新显示
break;
case 1:
// 如果选择的是“图层控制”面板
m_MapIndexTreeView.ModifyStyle(WS_VISIBLE, 0, 0); // 隐藏
m_LayerTreeView.ModifyStyle(0, WS_VISIBLE, 0); // 显示
m_ResultListBox.ModifyStyle(WS_VISIBLE, 0, 0); // 隐藏
m_ContentBtn.ModifyStyle(WS_VISIBLE, 0, 0); // 隐藏
m_PositingBtn.ModifyStyle(WS_VISIBLE, 0, 0); // 隐藏
Invalidate(TRUE); // 刷新显示
break;
case 2:
// 如果选择的是“查询结果”面板
m_MapIndexTreeView.ModifyStyle(WS_VISIBLE, 0, 0); // 隐藏
m_LayerTreeView.ModifyStyle(WS_VISIBLE, 0, 0); // 隐藏
m_ResultListBox.ModifyStyle(0, WS_VISIBLE, 0); // 显示
m_ContentBtn.ModifyStyle(0, WS_VISIBLE, 0); // 显示
m_PositingBtn.ModifyStyle(0, WS_VISIBLE, 0); // 显示
Invalidate(TRUE); // 刷新显示
break;
}
}
//-----------------------------------------------------------------------------------------
void CMapControlView::OnTvnSelchangedLayercontroltree(NMHDR *pNMHDR,
LRESULT *pResult)
{
LPNMTREEVIEW pNMTreeView;
pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
*pResult = 0;
CMainFrame* pMainWnd = (CMainFrame*)AfxGetMainWnd();
CNameGisView* pMapView = (CNameGisView*)
(pMainWnd->m_wndSplitter.GetPane(0,0));
HTREEITEM hCurrent, hSecChildItem, hThdChildItem;
HTREEITEM hChildItem, hNextItem;
CString szName = m_LayerTreeView.GetItemText(pNMTreeView->itemNew.hItem);
// 获取当前选择的项原来没有设置Check状态
BOOL bChecked = m_LayerTreeView.GetCheck(pNMTreeView->itemNew.hItem);
// 设置该项的所有子项的Check状态
int Level = GetNodeLevel(pNMTreeView->itemNew.hItem);
if(bChecked)
// 如果为Check状态,则设置该项及其所有子项为Unchecked状态
{
// 设置不可显示
switch (Level)
{
case 0:
hCurrent = pNMTreeView->itemNew.hItem;
m_LayerTreeView.SetCheck(hCurrent, !bChecked);
// 得到第1层的第一个节点
hChildItem = m_LayerTreeView.GetChildItem(hCurrent);
while (hChildItem != NULL)
{
m_LayerTreeView.SetCheck(hChildItem, !bChecked);
// 得到第2层的第一个节点
hSecChildItem = m_LayerTreeView.GetChildItem(hChildItem);
while ( hSecChildItem != NULL)
{
m_LayerTreeView.SetCheck(hSecChildItem, !bChecked);
// 得到第3层的第一个节点
hThdChildItem = m_LayerTreeView.GetChildItem(hSecChildItem);
while (hThdChildItem != NULL)
{
m_LayerTreeView.SetCheck(hThdChildItem, !bChecked);
// 得到该节点显示的名称(即地物类型名称)
szName = m_LayerTreeView.GetItemText(hThdChildItem);
// 根据地物类型名称得到图层的索引
int nIndex = pMainWnd->m_environment.
GetLayerIndexByName(szName);
// 设置图层的可见性
if (nIndex >=0)
{
pMainWnd->m_environment.m_layerInfos[nIndex].
layer.SetVisible(FALSE);
pMainWnd->m_environment.m_layerInfos[nIndex].
bVisible = false;
}
// 得到下一个节点
hNextItem = m_LayerTreeView.GetNextItem(
hThdChildItem, TVGN_NEXT);
hThdChildItem = hNextItem;
}
// 得到第3层的下一个节点
hSecChildItem = m_LayerTreeView.GetNextItem(
hSecChildItem, TVGN_NEXT);
}
// 得到第2层的下一个节点
hChildItem = m_LayerTreeView.GetNextItem(
hChildItem, TVGN_NEXT);
}
break;
case 1:
hCurrent = pNMTreeView->itemNew.hItem;
m_LayerTreeView.SetCheck(hCurrent, !bChecked);
// 得到第2层的第一个节点
hChildItem = m_LayerTreeView.GetChildItem(hCurrent);
while (hChildItem != NULL)
{
m_LayerTreeView.SetCheck(hChildItem, !bChecked);
// 得到第3层的第一个节点
hSecChildItem = m_LayerTreeView.GetChildItem(hChildItem);
while ( hSecChildItem != NULL)
{
m_LayerTreeView.SetCheck(hSecChildItem, !bChecked);
// 得到该节点显示的名称(即地物类型名称)
szName = m_LayerTreeView.GetItemText(hSecChildItem);
// 根据地物类型名称得到图层的索引
int nIndex = pMainWnd->m_environment.GetLayerIndexByName
(szName);
// 设置图层的可见性
if (nIndex >=0)
{
pMainWnd->m_environment.m_layerInfos[nIndex].layer.
SetVisible(FALSE);
pMainWnd->m_environment.m_layerInfos[nIndex].bVisible
= false;
}
// 得到下一个节点
hNextItem = m_LayerTreeView.GetNextItem(
hSecChildItem, TVGN_NEXT);
hSecChildItem = hNextItem;
}
// 得到第2层的下一个节点
hChildItem = m_LayerTreeView.GetNextItem(
hChildItem, TVGN_NEXT);
}
break;
case 2:
hCurrent = pNMTreeView->itemNew.hItem;
m_LayerTreeView.SetCheck(hCurrent, !bChecked);
// 得到第3层的第一个节点
hChildItem = m_LayerTreeView.GetChildItem(hCurrent);
while (hChildItem != NULL)
{
m_LayerTreeView.SetCheck(hChildItem, !bChecked);
// 得到该节点显示的名称(即地物类型名称)
szName = m_LayerTreeView.GetItemText(hChildItem);
// 根据地物类型名称得到图层的索引
int nIndex = pMainWnd->m_environment.GetLayerIndexByName
(szName);
// 设置图层的可见性
if (nIndex >=0)
{
pMainWnd->m_environment.m_layerInfos[nIndex].layer.SetVisible
(FALSE);
pMainWnd->m_environment.m_layerInfos[nIndex].bVisible
= false;
}
// 得到下一个节点
hNextItem = m_LayerTreeView.GetNextItem(
hChildItem, TVGN_NEXT);
hChildItem = hNextItem;
}
break;
case 3:
{
int nIndex = pMainWnd->m_environment.GetLayerIndexByName
(szName);
if (nIndex >=0)
{
pMainWnd->m_environment.m_layerInfos[nIndex].layer.SetVisible
(FALSE);
pMainWnd->m_environment.m_layerInfos[nIndex].bVisible
= false;
}
}
break;
}
}
else // 如果为Uncheck状态,则设置该项及其所有子项为Checked状态
{
// 设置可显示
switch (Level)
{
case 0:
hCurrent = pNMTreeView->itemNew.hItem;
m_LayerTreeView.SetCheck(hCurrent, !bChecked);
// 得到第1层的第一个节点
hChildItem = m_LayerTreeView.GetChildItem(hCurrent);
while (hChildItem != NULL)
{
m_LayerTreeView.SetCheck(hChildItem, !bChecked);
// 得到第2层的第一个节点
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -