VC+AO 下载本文

在出现的对话框里选择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;