|
一、功能描述
undefined
undefined本工程意在用eSuperMap类库构建一个最简单的应用工程,演示对打开的地图进行放大、缩小、漫游、选择、整幅显示和刷新等基本操作。
undefined
undefined |
| |
|
二、类及方法:
undefined
undefined
| 用到的类 |
方法 |
CSeWorkSpace
|
Close、GetDataSourceAt、GetMaps、Open |
| CSeMapWnd |
AddLayer、Close、GetAction、OnDraw、OnInitialUpdate、OnLButtonDblClk、OnLButtonDown、OnLButtonUp、OpenMap、Refresh、SetAction、ViewEntire |
| CSeDataSource |
GetDatasetCount、GetDatasetAt |
| CSeMaps |
GetMapCount、GetMap、GetMapAt 、GetMapNameAt |
undefined
undefined |
| |
|
三、说明及约定
undefined
undefined
- 工程说明 本工程为单文档类型的工程,提供菜单和工具条两种操作方式 菜单中提供“文件、地图”两组菜单,其中: “文件”这个组中有“打开、关闭和退出”三个菜单项; “地图”这个组中有“放大、缩小、自由缩放、光滑自由缩放、平移、光滑平移、点选、框选、整幅显示和刷新”十个菜单项; 工具条中提供“放大、缩小、自由缩放、光滑自由缩放、平移、光滑平移、点选、框选、整幅显示和刷新”十项,与菜单中的Map组的菜单项的资源ID相对应;
- 打开地图文件的约定 本工程主要是演示如何建立最简单的工程,并对地图进行基本操作,故约定: 打开工作空间后,判断有没有地图,如果有地图,则打开第一个地图,然后刷新地图窗口,显示地图;如果没有地图,则接着判断第一个数据源中有没有数据集,如果有,则把第一个数据集添加到地图窗口中,然后刷新地图窗口,显示地图。
- 编译程序的约定
eSuperMap 类库支持VC++、EVC++ 3.0 和 EVC++ 4.0三种开发环境,同时支持PDA的各种设备类型、各种CPU类型的动态连接库和静态连接库,在编译的时候,需要指定eSuperMap类库的头文件和库文件的搜索路径。 在EVC集成开发环境中,设置搜索路径方法,选择Tools/Options/Directories 选中指定的运行平台、CPU类型,然后开始设置包含头文件和库文件的路径: 1、设置头文件的搜索路径,选择Include Files , 添加一个路径搜索项,把eSuperMap类库的头文件目录 SeRSFC选进来即可; 2、设置库文件的搜索路径,选择Library Files , 添加一个路径搜索项,把eSuperMap类库的相应的库文件目录选进来即可。 具体设置请参见 联机帮助 中的开发环境设置。
undefined
undefined |
| |
|
四、实现过程
undefined
undefined
| |
- 注:这里只介绍工程的实现步骤,具体应用参见MapOperation工程(有详细的注释)
|
| |
- 1、新建一个单文档界面的工程,命名为 MapOperation.
|
| |
- 2、在 stdafx.h 文件中添加如下代码
#include "RSFC.h" //这是使用eSuperMap 类库需要的头文件
|
| |
- 3、在 CMapOperationApp.h 中添加如下代码:
CSeWorkSpace m_WorkSpace; //添加一个变量,用以打开工作空间文件
在CMapOperationApp 类外面声明一个全局变量
extern CMapOperationApp theApp;
|
| |
- 4、改造原有的菜单,按 “三、说明及约定”中第一条所说的设置 改造工具条,按“三、说明及约定”中第一条所说的设置
|
| |
- 5、在 CMapOperationView.cpp中添加一下成员变量并在构造函数中初始化
CSeMapWnd m_MapWnd; //用以显示地图
bool m_bFileOpened; //用以记录是否已经打开地图
CMapOperationView::CMapOperationView()
{//变量的初始化
m_bFileOpened = false;
}
|
| |
- 6、在 CMapOperationView 类中添加消息响应函数,实现具体的功能
//打开地图文件
void CMapOperationView::OnFileOpen()
{
CFileDialog dlgFile(true, _T("pmw|pmw|*.*"), NULL, OFN_HIDEREADONLY
| OFN_OVERWRITEPROMPT,_T("WorkSpace Files (*.pmw)|*.pmw") );
if( dlgFile.DoModal() == IDOK )
{
//如果已经打开工作空间文件,则关闭
if(theApp.m_WorkSpace.IsOpen())
{
theApp.m_WorkSpace.Close();
m_MapWnd.Close();
m_bFileOpened = false;
}
//获得图形文件的完整路径及文件名
CString strFileName = dlgFile.GetPathName();
//打开工作空间并弹出对话框
if( theApp.m_WorkSpace.Open( strFileName ) )
{
CSeMaps *pMaps = theApp.m_WorkSpace.GetMaps();
if( pMaps )
{
if ( pMaps->GetMapCount() > 0 )
{
CSeMapDef MapDef;
//打开地图方法一: 通过名字取地图
CString strMapName = pMaps->GetMapNameAt(0);
if( pMaps->GetMap( strMapName,MapDef ) )
{
if(m_MapWnd.OpenMap(MapDef))
{
m_MapWnd.Refresh();
}
}
//打开地图方法二: 通过序号取地图
//*if( pMaps->GetMapAt( 0, MapDef ) )
{
if(m_MapWnd.OpenMap(MapDef))
{
m_MapWnd.Refresh();
}
}*/
}
//没有默认地图,打开第一个数据源的第一个数据集作为当前地图
else
{
CSeDataSource *pDataSource =
theApp.m_WorkSpace.GetDataSourceAt( 0 );
if( pDataSource && pDataSource->GetDatasetCount() > 0 )
{
CSeDataset *pDataset = pDataSource->GetDatasetAt( 0 );
if( pDataset )
{
m_MapWnd.AddLayer( pDataset );
m_MapWnd.Refresh();
}
}
}
}
m_bFileOpened = true;
}
}
}
//重载初始化函数
void CMapOperationView::OnInitialUpdate()
{
//初始化视图窗口
m_MapWnd.OnInitialUpdate( &theApp.m_WorkSpace, this );
CView::OnInitialUpdate();
}
//将地图画出来
void CMapOperationView::OnDraw(CDC* pDC)
{
CMapOperationDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc);
CRect rcClient;
GetClientRect(&rcClient);
m_MapWnd.OnDraw(pDC,rcClient,rcClient);
}
//设置地图漫游状态
void CMapOperationView::OnMapPan()
{
m_MapWnd.SetAction(CSeDrawParameters::uaPan);
}
//界面响应函数
void CMapOperationView::OnUpdateMapPan(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(m_MapWnd.GetAction()= =CSeDrawParameters::uaPan);
}
//重载OnLButtonDown()函数
void CMapOperationView::OnLButtonDown(UINT nFlags, CPoint point)
{
m_MapWnd.OnLButtonDown(nFlags,point);
CView::OnLButtonDown(nFlags, point);
}
|
| |
- 7、其他的重载函数和地图操作函数请看MapOperation工程。
|
|
(本文已被浏览 次) | | |