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

📄 layermanagedlg.cpp

📁 evc下ArcInfo操作程序源代码
💻 CPP
字号:
// LayerManageDlg.cpp : implementation file
//

#include "stdafx.h"
#include "SimpleMap.h"
#include "LayerManageDlg.h"

#include "MainFrm.h"
#include "SimpleMapDoc.h"
#include "SimpleMapView.h"

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

/////////////////////////////////////////////////////////////////////////////
// CLayerManageDlg dialog


CLayerManageDlg::CLayerManageDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CLayerManageDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CLayerManageDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
}


void CLayerManageDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CLayerManageDlg)
	DDX_Control(pDX, IDC_LIST_LAYERS, m_ctrlListLayers);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CLayerManageDlg, CDialog)
	//{{AFX_MSG_MAP(CLayerManageDlg)
	ON_NOTIFY(NM_CLICK, IDC_LIST_LAYERS, OnClickListLayers)
	ON_BN_CLICKED(IDC_DELETE_LAYER, OnDeleteLayer)
	ON_BN_CLICKED(IDC_ADD_LAYER, OnAddLayer)
	ON_BN_CLICKED(IDC_RADIO1, OnRadio1)
	ON_BN_CLICKED(IDC_RADIO2, OnRadio2)
	ON_BN_CLICKED(IDC_SET_LAYER, OnSetLayer)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CLayerManageDlg message handlers

BOOL CLayerManageDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	//1.设置表头
	m_ctrlListLayers.InsertColumn(0,_T("图层名称"),LVCFMT_LEFT,220,-1);
	m_ctrlListLayers.SetExtendedStyle(LVS_EX_FULLROWSELECT);

	//2.加载图层信息
	LoadLayers();
	m_nSelected=-1;

	//3.设置填充方式
	m_nFillStyle=0;
	((CButton*)(GetDlgItem(IDC_RADIO1)))->SetCheck(BST_CHECKED);
	((CButton*)(GetDlgItem(IDC_RADIO2)))->SetCheck(BST_UNCHECKED);
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CLayerManageDlg::LoadLayers()
{
	CMainFrame *pFrame = (CMainFrame*)AfxGetMainWnd();
	CSimpleMapView *pView = (CSimpleMapView*)pFrame->GetActiveView();
	CSimpleMapDoc *pDoc = pView->GetDocument();

	CMapLayer *pLayer;

	m_ctrlListLayers.DeleteAllItems();
	//增加图层到列表
	int iCount = pDoc->m_MapLayers.GetCount(); 
	for(int i = 0 ; i < iCount ; i++ )
	{ 
		pLayer = pDoc->m_MapLayers.GetAt(i);
		m_ctrlListLayers.InsertItem(i,pLayer->GetLayerName(),-1);		
	} 

	m_nSelected=-1;
}

void CLayerManageDlg::OnClickListLayers(NMHDR* pNMHDR, LRESULT* pResult) 
{
	//选中一条记录
	if(m_ctrlListLayers.GetSelectionMark()!=-1)
	{
		m_nSelected=m_ctrlListLayers.GetSelectionMark();
	}
	else
	{
		m_nSelected=-1;
	}
	
	*pResult = 0;
}

void CLayerManageDlg::OnDeleteLayer() 
{
	if(m_nSelected==-1)
	{
		AfxMessageBox(L"尚未选择要删除的图层!请先在列表中点击选择。");
		return;
	}

	CMainFrame *pFrame = (CMainFrame*)AfxGetMainWnd();
	CSimpleMapView *pView = (CSimpleMapView*)pFrame->GetActiveView();
	CSimpleMapDoc *pDoc = pView->GetDocument();

	pDoc->m_MapLayers.Remove(m_nSelected);
	
	LoadLayers();
}

void CLayerManageDlg::OnAddLayer() 
{
	CMainFrame *pFrame = (CMainFrame*)AfxGetMainWnd();
	CSimpleMapView *pView = (CSimpleMapView*)pFrame->GetActiveView();
	CSimpleMapDoc *pDoc = pView->GetDocument();

	CString csFilter = " shp Files (*.shp)|*.shp||";

	CFileDialog fDlg(TRUE,0,0,OFN_HIDEREADONLY|OFN_FILEMUSTEXIST,(LPCTSTR)csFilter
	                 ,NULL);
	pFrame = (CMainFrame*)AfxGetMainWnd(); 
	if( fDlg.DoModal() != IDCANCEL  ) 
	{
		CString csFileName = fDlg.GetPathName();  
		CMapLayer* pLayer = new CMapLayer;
        pLayer->SetLayerName(csFileName); 
		if ( pLayer->LoadData(csFileName) > 0 )
		{
			
			pDoc->m_MapLayers.Add(pLayer);
			pDoc->m_MapLayers.GetAllExtent(pDoc->m_AllExtent); 
				
			if ( pDoc->m_MapLayers.GetCount() == 1 ) 
            { 
				pView = (CSimpleMapView*)pFrame->GetActiveView();
				pView->InitScale();
            }
        }
		else 
        {
			::MessageBox(NULL,L"加载文件失败!",L"提示",MB_OK);
		    delete pLayer;
		}	
	
	}

	LoadLayers();
}

void CLayerManageDlg::OnRadio1() 
{
	m_nFillStyle=0;
	((CButton*)(GetDlgItem(IDC_RADIO1)))->SetCheck(BST_CHECKED);
	((CButton*)(GetDlgItem(IDC_RADIO2)))->SetCheck(BST_UNCHECKED);
}

void CLayerManageDlg::OnRadio2() 
{
	m_nFillStyle=1;
	((CButton*)(GetDlgItem(IDC_RADIO1)))->SetCheck(BST_UNCHECKED);
	((CButton*)(GetDlgItem(IDC_RADIO2)))->SetCheck(BST_CHECKED);
}

void CLayerManageDlg::OnSetLayer() 
{
	if(m_nSelected==-1)
	{
		AfxMessageBox(L"尚未选择要设置的图层!请先在列表中点击选择。");
		return;
	}

	if(m_nFillStyle==0)
	{
		CSingleFillDlg Dialog1;
		Dialog1.m_csLayerName=m_ctrlListLayers.GetItemText(m_nSelected,0);
		Dialog1.DoModal();
	}
	else
	{
		CUniqueFillDlg Dialog1;
		Dialog1.m_csLayerName=m_ctrlListLayers.GetItemText(m_nSelected,0);
		Dialog1.DoModal();
	}
}

⌨️ 快捷键说明

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