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

📄 mapcontrolview.cpp

📁 公交查询系统源代码 是武汉的 提供简单的查询和乘车方案 vc++
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// MapControlView.cpp : implementation file
//

#include "stdafx.h"
#include "Public_TGIS.h"
#include "MapControlView.h"
#include "Mainfrm.h"
#include "Public_TGISView.h"
#include "AppApi.h"
#include "HawkView.h"
#include "ContentDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CMapControlView

IMPLEMENT_DYNCREATE(CMapControlView, CFormView)

CMapControlView::CMapControlView()
	: CFormView(CMapControlView::IDD)
{
	//{{AFX_DATA_INIT(CMapControlView)
		// NOTE: the ClassWizard will add member initialization here

	//}}AFX_DATA_INIT
}

CMapControlView::~CMapControlView()
{
}

void CMapControlView::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CMapControlView)
	DDX_Control(pDX, IDC_MAPINDEX, m_MapIndexTreeView);
	DDX_Control(pDX, IDC_LIST_RESULT, m_ResultListBox);
	DDX_Control(pDX, IDC_LAYERCONTROLTREE, m_LayerTreeView);
	DDX_Control(pDX, IDC_BUTTON_POSITING, m_PositingBtn);
	DDX_Control(pDX, IDC_BUTTON_CONTENT, m_ContentBtn);
	DDX_Control(pDX, IDC_TAB_WORKSPACE, m_OperaTab);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CMapControlView, CFormView)
	//{{AFX_MSG_MAP(CMapControlView)
	ON_NOTIFY(TCN_SELCHANGE,  IDC_TAB_WORKSPACE, OnSelchangeTabWorkspace)
	ON_NOTIFY(TVN_SELCHANGED, IDC_LAYERCONTROLTREE, OnSelchangedLayercontroltree)
	ON_NOTIFY(TVN_SELCHANGED, IDC_MAPINDEX, OnSelchangedMapindex)
	ON_BN_CLICKED(IDC_BUTTON_CONTENT, OnButtonContent)
	ON_BN_CLICKED(IDC_BUTTON_POSITING, OnButtonPositing)
	ON_LBN_SETFOCUS(IDC_LIST_RESULT, OnSetfocusListResult)
	ON_WM_SETFOCUS()
	//}}AFX_MSG_MAP
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();
	
	// TODO: Add your specialized code here and/or call the base class
	// 在选项卡控件中加入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::OnSelchangeTabWorkspace(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	
	*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);   // 隐藏
		FocusOnMain();
		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);      // 隐藏
		FocusOnMain();
		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);      // 显示
		FocusOnMain();
		Invalidate(TRUE); // 刷新显示
		break;

	}

    
}

void CMapControlView::OnSelchangedLayercontroltree(NMHDR *pNMHDR, 
													  LRESULT *pResult)
{
	LPNMTREEVIEW pNMTreeView; 
	pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
	*pResult = 0;

	CMainFrame* pMainWnd = (CMainFrame*)AfxGetMainWnd();
	CPublic_TGISView* pMapView = (CPublic_TGISView*)
		         (pMainWnd->m_wndSplitter.GetPane(0,0));
	HTREEITEM hCurrent, hSecChildItem;
	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);
						// 得到该节点显示的名称(即地物类型名称)
					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 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层的第一个节点
				
					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;
					}
                    
					
				

				// 得到第2层的下一个节点
				hChildItem = m_LayerTreeView.GetNextItem(
					                         hChildItem, TVGN_NEXT);
			}
			break;
		case 2:
			hCurrent = pNMTreeView->itemNew.hItem;
			m_LayerTreeView.SetCheck(hCurrent, !bChecked);
							
			m_LayerTreeView.SetCheck(hCurrent, !bChecked);
			// 得到该节点显示的名称(即地物类型名称)
			szName = m_LayerTreeView.GetItemText(hCurrent);
			// 根据地物类型名称得到图层的索引
			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层的第一个节点
				hSecChildItem = m_LayerTreeView.GetChildItem(hChildItem);
				while ( hSecChildItem != NULL)
				{
					m_LayerTreeView.SetCheck(hSecChildItem, !bChecked);
						// 得到该节点显示的名称(即地物类型名称)
					szName = m_LayerTreeView.GetItemText(hSecChildItem);
						// 根据地物类型名称得到图层的索引

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -