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

📄 mapcontrolview.cpp

📁 程序编写环境为Visual Studio.NET 2002
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// 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 + -