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

📄 dlgselect.cpp

📁 Embedded vc++下开发的路经分析程序
💻 CPP
字号:
// DlgSelect.cpp : implementation file
//
#include "stdafx.h"
#include "resource.h"
#include "DlgSelect.h"
#include "PathAnalyst.h"

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

/////////////////////////////////////////////////////////////////////////////
// CDlgSelect dialog


CDlgSelect::CDlgSelect(CWnd* pParent /*=NULL*/)
	: CDialog(CDlgSelect::IDD, pParent)
{//初始化变量
	//{{AFX_DATA_INIT(CDlgSelect)
	//}}AFX_DATA_INIT
	m_strMapName = _T("");			
	m_strDatasourceAlias= _T("");	
	m_strDatasetName= _T("");		
	m_bMap = false;
}


void CDlgSelect::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDlgSelect)
	DDX_Control(pDX, IDC_LIST_DATASET, m_lstDataset);
	DDX_Control(pDX, IDC_COMBO_DATASOURCE, m_cmbDataSource);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CDlgSelect, CDialog)
	//{{AFX_MSG_MAP(CDlgSelect)
	ON_CBN_SELCHANGE(IDC_COMBO_DATASOURCE, OnSelchangeComboDatasource)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDlgSelect message handlers

BOOL CDlgSelect::OnInitDialog() 
{//初始化对话框
	CDialog::OnInitDialog();
	//创建一个列
	CRect rcClient;
	m_lstDataset.GetClientRect(&rcClient);
	CString strInfo[1];
	int nWidth[1];
	nWidth[0] = rcClient.Width();
	
	BuildColumns(1,nWidth,strInfo);
	if ( m_bMap )
	{
		//只显示地图列表
		m_cmbDataSource.EnableWindow( FALSE );
		this->SetDlgItemText( IDC_STATIC_DATASET, _T("请选择地图名:") );
		AddMap();
	}
	else
	{
		//显示数据源和数据集列表
		m_ImageList.Create(IDB_BITMAP_DATAVIEW, 16, 0, RGB (255, 0, 0));
		m_lstDataset.SetImageList(&m_ImageList,LVSIL_SMALL);
		
		m_lstDataset.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_SUBITEMIMAGES);
		//先清空数据源列表
		m_cmbDataSource.ResetContent();
		m_cmbDataSource.EnableWindow( TRUE );
		//获取数据源
		long nDataSourceCount = theApp.m_WorkSpace.GetDataSourceCount();
		for ( register i=0; i<nDataSourceCount; i++ )
		{
			CSeDataSource *pDataSource = theApp.m_WorkSpace.GetDataSourceAt( i );
			if ( pDataSource )
			{
				CString strName = pDataSource->GetAlias();//别名
				m_cmbDataSource.InsertString( i, strName);
			}
		}
		m_cmbDataSource.SetCurSel( 0 );
		//填入数据集到列表框中
		AddDataset();
		UpdateData(FALSE);
	}	
	return TRUE;  
}

void CDlgSelect::BuildRows( int nRows, CString *pcValue,int nImage)
{
	//创建列表框的行
	LV_ITEM		lvitem;
	int iItem = m_lstDataset.GetItemCount(), 
		iSubItem = 0,
		iActualItem = 0;
		
	for (iSubItem = 0; iSubItem < nRows; iSubItem++)
	{
		lvitem.mask = LVIF_TEXT | (iSubItem == 0 ? LVIF_IMAGE : 0);
		lvitem.iItem = iItem;
		lvitem.iSubItem = iSubItem;
		lvitem.pszText = (unsigned short*)(LPCTSTR)pcValue[iSubItem];
		lvitem.iImage = nImage;

		if (iSubItem == 0)
			iActualItem = m_lstDataset.InsertItem(&lvitem);
		else
			m_lstDataset.SetItem(&lvitem);		
	}
}

void CDlgSelect::BuildColumns(int nCols, int *nWidth, CString *csCol)
{
	//创建列表框的列
	LV_COLUMN lvc;

	lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
	
	for(register i = 0; i < nCols; i++)
	{
		lvc.iSubItem = i;
		lvc.pszText = (unsigned short*)(LPCTSTR)csCol[i];
		lvc.cx = nWidth[i];
		lvc.fmt = LVCFMT_LEFT;
		m_lstDataset.InsertColumn(i,&lvc);
	}
}

void CDlgSelect::AddMap()
{
	//将地图名加入列表框中
	CSeMaps *pMaps = theApp.m_WorkSpace.GetMaps();
	if ( pMaps )
	{
		for ( register i=0; i<pMaps->GetMapCount(); i++ )
		{
			CSeMapDef MapDef;
			CString strInfo[1];
			int nImage = 0;
			if ( pMaps->GetMapAt( i, MapDef ) )
			{
				
				m_strMapName = MapDef.m_strMapName;
				strInfo[0] = m_strMapName;
				BuildRows(1,strInfo,nImage);	
			}
		}
	}
}

void CDlgSelect::AddDataset()
{
	//将网络数据集加入列表框中
	int nSelItem = m_cmbDataSource.GetCurSel();
	CSeDataSource *pDataSource = theApp.m_WorkSpace.GetDataSourceAt( nSelItem );
	if ( pDataSource )
	{
		m_strDatasourceAlias = pDataSource->GetAlias();
		long nDatasetCount = pDataSource->GetDatasetCount();
		for ( register i=0; i<nDatasetCount; i++ )
		{
			CString strDatasetInfo[1];
			int nImage = 0;
			CSeDataset *pDataset = pDataSource->GetDatasetAt( i );
			if ( pDataset )
			{			
				if ( pDataset->GetType() == CSeDatasetInfo::Network ) 
				{
					strDatasetInfo[0] = pDataset->GetName();
					nImage = 4;
					BuildRows(1,strDatasetInfo,nImage);
				}
			}					
		}
	}
}


void CDlgSelect::OnOK() 
{//选择成功
	UpdateData( TRUE );
	CString strDatasetName;
	POSITION pos = m_lstDataset.GetFirstSelectedItemPosition();
	if ( pos!=NULL )
	{
		int nItem = m_lstDataset.GetNextSelectedItem( pos );
		if ( nItem != -1 )
		{
			if ( !m_bMap )
			{//返回选择的数据集名
				m_strDatasetName = m_lstDataset.GetItemText( nItem, 0);	
			}
			else
			{//返回选择的地图名
				m_strMapName = m_lstDataset.GetItemText( nItem, 0 );
			}
		}
	}	
	CDialog::OnOK();
}

void CDlgSelect::OnCancel() 
{//取消选择
	CDialog::OnCancel();
}

void CDlgSelect::OnSelchangeComboDatasource() 
{
//刷新数据集列表
	m_lstDataset.DeleteAllItems();
	AddDataset();
}

CSeDatasetVector * CDlgSelect::GetDataset()
{//获取网络数据集
	CSeDataSource* pDataSource = theApp.m_WorkSpace.GetDataSourceByAlias( m_strDatasourceAlias );
	if( pDataSource != NULL )
	{
		CSeDatasetVector* pDataset = (CSeDatasetVector *)pDataSource->GetDataset( m_strDatasetName );
		if( pDataset && pDataset->GetType() == CSeDatasetInfo::Network )
		{
			return pDataset;
		}
		return NULL;
	}
	return NULL;
}

⌨️ 快捷键说明

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