在出现的对话框里选择ESRI MapControl,确定。
接下来查看修改ESRI MapControl的属性(如下图),选择Control页,在Map Document:处选择一个mxd/mxt/pmf文件,即要加载的地图文档。
或者选择Map页(如下图:),在右边的list中添加图层也可。
保存修改,编译程序。运行就可以看到一个简单显示地图的程序了(如下图)。
三、本章小结
上面只是一个简单实例,里面有许多功能都没有,当你把程序窗口最大化时你会发现,地图窗口没有随窗口放大。在下一节我们将完善这个功能,并添加地图漫游的一些功能。
5 AO开发笔记(实战篇)-用VC+AO开发独立的应用程
序(2)
作者:Snoopy 文章来源:中国3S网站(httpwww.863s.com) 点击数:2852 更新时间:2006-12-11
在上一节中我们实现了一个简单的显示地图的程序。下面我们在它的基础上完善和添加以下新的功能:
1.当框架窗口大小更改时改变地图控件窗口使之随框架窗口增大。 2.增加地图漫游功能:移动、放大、缩小、显示全图 一、更改项目配置、添加引入库代码
在本节中我们将使用AO提供的一些接口,所以需要更改项目配置,以及添加引用AO库的代码。
首先打开上一节所建项目。选择菜单Tools->Options->Directories页在Include files里添加两个路径(如果你的ArcGIS的安装目录在其它盘,需做相应改动):
C:\\PROGRAM FILES\\ARCGIS\\COM C:\\PROGRAM FILES\\ARCGIS\\BIN 在项目的StdAfx.h中添加如下代码: // AO引入库
#pragma warning(push) #pragma warning(disable: 4192) #pragma warning(disable: 4146)
#import \ raw_interfaces_only
raw_native_types
no_namespace
named_guids exclude(\, \,\, \)
#import \ raw_interfaces_only, raw_native_types, no_namespace, named_guids exclude(\)
#import \ raw_interfaces_only named_guids
#import \ raw_interfaces_only named_guids
#import \ raw_interfaces_only raw_native_types no_namespace named_guids
#import \ raw_interfaces_only, named_guids
#import \ raw_interfaces_only
no_namespace named_guids exclude(\, \)
#import \ raw_interfaces_only
no_namespace named_guids exclude(\, \)
#import \ raw_interfaces_only raw_native_types no_namespace
raw_native_types raw_native_types
raw_native_types,
no_namespace,
raw_native_types
no_namespace
raw_native_types
no_namespace
named_guids
#import \ raw_interfaces_only named_guids
#import \ raw_interfaces_only named_guids
#import \ raw_interfaces_only no_namespace named_guids
#import \ raw_interfaces_only raw_native_types no_namespace named_guids
#pragma warning(pop)
二、添加地图浏览功能,完善地图窗口缩放 1、使MapControl随窗口放大
首先为CAOExStep1View添加一个保护类型的成员变量: IMapControl3Ptr m_ipMapControl; // 地图控件
该变量保存指向MapContrl的接口指针。然后在类CAOExStep1View的成员函数OnInitialUpdate添加如下代码初始化它(红色部分):
void CAOExStep1View::OnInitialUpdate() {
…// 此处省略其它代码 // 获取MapControl指针
m_ipMapControl = GetDlgItem(IDC_MAPCONTROL1)->GetControlUnknown(); }
为类CAOExStep1View添加窗口改变大小事件函数,并在里面添加如下代码(红色部分):
void CAOExStep1View::OnSize(UINT nType, int cx, int cy) {
CFormView::OnSize(nType, cx, cy);
// View窗口改变大小时改变MapControl大小 if(m_ipMapControl!=NULL) { CRect rc; GetClientRect(rc);
GetDlgItem(IDC_MAPCONTROL1)->MoveWindow(rc); } }
经过上面的修改,现在重新编译程序,把窗口最大化,你会看到地图窗口随之放大。
raw_native_types
raw_native_types
no_namespace
raw_native_types
no_namespace
2、接下来我们来添加地图漫游功能
首先把项目默认的工具栏按钮全部删除只留下关于按钮。然后添加5个按钮,按钮ID和提示文本如下,按钮的图标可以使用ArcGIS的相应功能的图标(ArcGIS的一些图标保存在按照目录的Bin\\Icons\\下面,是一系列bmp文件)。
ID_MAP_ARROW \选择状态\\n选择状态\ID_MAP_PAN \地图平移\\n地图平移\ID_MAP_ZOOMIN\地图放大\\n地图放大\ID_MAP_ZOOMOUT \地图缩小\\n地图缩小\ID_MAP_FULLEXTENT \显示全图\\n显示全图\
为了处理鼠标事件我们需要为MapControl添加一个onMouseDown事件函数,在类CAOExStep1View里添加上面添加的工具栏按钮的响应函数,另外我们还需要在类CAOExStep1View头文件里添加一个标志当前鼠标操作状态的成员变量:
esriARTool m_ARTool; // 鼠标当前状态
在工具栏响应函数中添加如下代码(红色部分): // 选择状态
void CAOExStep1View::OnMapArrow() {
m_ARTool = esriARToolNoneSelected;
m_ipMapControl->put_MousePointer(esriPointerDefault); }
// 地图平移
void CAOExStep1View::OnMapPan() {
m_ARTool = esriARToolMapPan;
m_ipMapControl->put_MousePointer(esriPointerPan); }
// 地图放大
void CAOExStep1View::OnMapZoomin() {
m_ARTool = esriARToolMapZoomIn;
m_ipMapControl->put_MousePointer(esriPointerZoomIn); }
// 地图缩小
void CAOExStep1View::OnMapZoomout() {
m_ARTool = esriARToolMapZoomOut;