我的第一个MFC的ArcGIS Engine程序
原文 http://blog.csdn.net/zzahkj/article/details/9003518
(第一版,以VC++6.0+AE9.3为例)
首次,学习MFC,写个笔记,MFC还是挺好学的,废话不说,写MFC:
1.新建一个MFC工程
1)新建一个MFC AppWizard[exe],命名为FirstMap
2)在MFC AppWizard-step1中选择Single Document选项。然后默认到最后,在Base class中选择CFromView,再点击完成。
2.添加AE控件
1)从“工程”菜单,找到添加工程——Components and Controls…,打开Components and Controls Gallery对话框,双击Registered ActiveX Controls文件夹,选择Esri MapControl,单击insert,弹出的对话框点击确定和OK
2)同样的方法,添加TOC Control、ToolBarControl、LicenseControl,这些控件都出现在控件工具条上,并且向窗体添加各控件
3.设置控件并建立关联
1)右击MapControl打开Properties,设置Control属性页
2)设置ToolbarControl的Properties,在Items中点击Add,打开Controls Commands对话框,设置工具条属性,在Generic和Map Navigation列表中选择常用的命令拖到(或双击)工具条上。
3)右键建立类向导(或者Ctrl+W),给MapControl、TOCControl、ToolbarControl分别添加对应的成员变量m_ctrlMap、m_ctrlTOC、m_ctrlToolBar,点击OK
4)添加代码,建立三个控件之间间的关联,在void CFirstMapView::OnInitialUpdate()添加如下代码,大功告成
- void CFirstMapView::OnInitialUpdate()
- {
- CFormView::OnInitialUpdate();
- GetParentFrame()->RecalcLayout();
- ResizeParentToFit();
- //控件关联
- m_ctrlTOC.SetBuddyControl(m_ctrlMap.GetObject());
- m_ctrlToolBar.SetBuddyControl(m_ctrlMap.GetObject());
- }
程序运行结果如下:
4.设置地图控件大小
上面的程序做完之后,放大窗体后发现控件不能随着窗体放大而放大
但我们需要控件随着窗体的放大而放大。在VC中,窗体在改变大小时会产生WM_SIZE消息,可以在消息处理时修改控件的大小,使它充满窗体。
1)右键建立类向导(或者Ctrl+W)打开MFC ClassWizard,映射WM_SIZE消息(双击WM_SIZE)
修改OnSize函数,代码如下:
- void CFirstMapView::OnSize(UINT nType, int cx, int cy)
- {
- CFormView::OnSize(nType, cx, cy);
- // TODO: Add your message handler code here
- if(m_ctrlTOC.GetSafeHwnd() != NULL)
- {
- if(cx<500)//窗体宽度小于500像素时,TOC控件宽度是窗体宽度的五分之二
- {
- m_ctrlToolBar.MoveWindow(0,0,cx,20);
- m_ctrlTOC.MoveWindow(0,20,int(cx*0.4),cy);
- m_ctrlMap.MoveWindow(int(cx*0.4),20,cx,cy);
- }
- else//窗体宽度不小于500像素时,TOC控件宽度为200像素
- {
- m_ctrlToolBar.MoveWindow(0,0,cx,20);
- m_ctrlTOC.MoveWindow(0,20,200,cy);
- m_ctrlMap.MoveWindow(200,20,cx,cy);
- }
- }
- }
实例源码见
我的第一个MFC的ArcGIS Engine程序的更多相关文章
- VC、OpenGL、ArcGIS Engine开发的二维三维结合的GIS系统
一.前言 众所周知,二维GIS技术发展了近四十年,伴随着计算机软硬件以及关系型数据库的飞速发展,二维GIS技术已日臻完善.在对地理信息的分析功能上有着无可比拟的优势.一些宏观的地理信息,一维的地理信息 ...
- 【转载】Python与ArcGIS Engine的集成
本文转载自Fransico<Python与ArcGIS Engine的集成> 1 在Python中调用AO类库 1.1 准备工作 本文所使用环境:ArcGIS 10.0.Python ...
- Arcgis Engine 添加一个Symbol符号样式步骤
public static void DrawPictureMarkerSymbol(IGlobe globe, String layerName) { //添加一个图层 ESRI.ArcGIS.Ca ...
- WPF/ArcGIS Engine三维开发和EVC3/4升级到VS项目建议(转)
系统环境:Windows 7 专业版,Visual Studio 2010,ArcGIS Engine 9.3 1.创建项目 创建一个WPF的项目,必须选择.Net framework 3.5(AE9 ...
- ArcGIS Engine开发之属性查询
属性查询即基于空间数据的属性数据的查询,通过用户提交SQL语言中的where语句定义的查询条件,对属性数据进行搜索,从而得到查询结果的操作. 相关的类与接口 与属性查询功能相关的类主要有QureyFi ...
- ArcGIS Engine开发之地图基本操作(4)
ArcGIS Engine开发中数据库的加载 1.加载个人地理数据库数据 个人地理数据库(Personal Geodatabase)使用Miscrosoft Access文件(*.mdb)进行空间数据 ...
- ArcGIS Engine开发之地图基本操作(3)
地图数据的加载 一.加载Shapefile数据 Shapefile文件是目前主流的一种空间数据的文件存储方式,也是不同GIS软件进行数据格式转换常用的中间格式.加载Shapefile数据的方式有两种: ...
- ArcGIS Engine开发之地图基本操作(2)
地图数据的加载 1.加载地图文档 ArcGIS Engine支持加载多种类型的数据,有矢量数据的Coverage.Shapefile.dwg/dxf文件,栅格数据的BMP.GRID.控件数据库等.很多 ...
- ArcGIS Engine开发前基础知识(3)
对象模型图 一.对象模型图中的类与接口 ArcGIS Engine 提供大量的对象,这些对象之间存在各种各样的关系,如继承.组合.关联等.对象模型图(Object model diagram,ODM) ...
随机推荐
- Android模仿微信语音聊天功能
项目效果如下: 项目目录结构如下: 代码如下: AudioManager.java import java.io.File; import java.io.IOException; import ja ...
- <转载>模板声明中template <typename T>和template <class T>
原文地址http://blog.csdn.net/bug07250432/article/details/10150625 在c++Template中很多地方都用到了typename与class这两个 ...
- 盒子模型&position定位
有时候深深的感觉语文这门课程其实很有用, 至少以前学的时候没有感觉到 直到现在阅读大量的别人的资料文章的时候或者是看一些题目....... 总之:认真阅读小心品味 当然,前面的孤言自语和本文无关,只是 ...
- Linux下redis的安装及用法
1.下载源代码包redis-2.8.21.tar.gz,并将其上传到指定文件夹/urs/src,然后对其进行解压: [root@Slave1pc src]# tar -xvf redis-2.8.21 ...
- 解决一个maven在eclipse中M2_HOME不能调整的问题
在坚持了许久之后,依然还是没能抵住maven的各种攻击,终于从0开始maven. 开始由于有关小项目,时间紧任务重,没仔细研究maven,便匆匆上手了,导致maven库的位置放在了c盘当前用户的数据目 ...
- ie6+7+8等对background-color:rgba(),background-img渐变的兼容
一,ie8兼容rgba()的解决办法 今天遇到了一个问题,要在一个页面中设置一个半透明的白色div.这个貌似不是难题,只需要给这个div设置如下的属性即可: background: rgba(255, ...
- mvc Html.RenderAction方法解析
@{Html.RenderAction("Listview--控制器里面方法", "Home--控制器名", new { cid = "bda347f ...
- js如何关闭当前页,而不弹出提示框
//关闭当前页面,并且打开新页面,(不提示) function closeWinAndOpen(url) { //利用随机数处理WinName var sWinName = "LR" ...
- hdu1754 基础线段树
I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- (转)Source vs Binary Disadvantages & Advantages of each!
原链接:http://www.linuxforums.org/forum/newbie/26472-source-vs-binary-disadvantages-advantages-each.htm ...