我的第一个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选项。

原文 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()添加如下代码,大功告成

 

  1. void CFirstMapView::OnInitialUpdate()  
  2. {  
  3.     CFormView::OnInitialUpdate();  
  4.     GetParentFrame()->RecalcLayout();  
  5.     ResizeParentToFit();  
  6.   
  7.     //控件关联  
  8.     m_ctrlTOC.SetBuddyControl(m_ctrlMap.GetObject());  
  9.     m_ctrlToolBar.SetBuddyControl(m_ctrlMap.GetObject());  
  10.   
  11. }  


程序运行结果如下:

4.设置地图控件大小

上面的程序做完之后,放大窗体后发现控件不能随着窗体放大而放大

但我们需要控件随着窗体的放大而放大。在VC中,窗体在改变大小时会产生WM_SIZE消息,可以在消息处理时修改控件的大小,使它充满窗体。

1)右键建立类向导(或者Ctrl+W)打开MFC ClassWizard,映射WM_SIZE消息(双击WM_SIZE)

修改OnSize函数,代码如下:

 

  1. void CFirstMapView::OnSize(UINT nType, int cx, int cy)   
  2. {  
  3.     CFormView::OnSize(nType, cx, cy);  
  4.       
  5.     // TODO: Add your message handler code here  
  6.       
  7.     if(m_ctrlTOC.GetSafeHwnd() != NULL)  
  8.     {  
  9.         if(cx<500)//窗体宽度小于500像素时,TOC控件宽度是窗体宽度的五分之二  
  10.         {  
  11.             m_ctrlToolBar.MoveWindow(0,0,cx,20);  
  12.             m_ctrlTOC.MoveWindow(0,20,int(cx*0.4),cy);  
  13.             m_ctrlMap.MoveWindow(int(cx*0.4),20,cx,cy);  
  14.         }  
  15.         else//窗体宽度不小于500像素时,TOC控件宽度为200像素  
  16.         {  
  17.             m_ctrlToolBar.MoveWindow(0,0,cx,20);  
  18.             m_ctrlTOC.MoveWindow(0,20,200,cy);  
  19.             m_ctrlMap.MoveWindow(200,20,cx,cy);  
  20.         }  
  21.     }  
  22. }  


实例源码见

http://download.csdn.net/detail/zzahkj/5494265
目录
相关文章
|
7月前
|
Python
ArcGIS中ArcMap通过Python程序脚本新建工具箱与自定义工具的方法
ArcGIS中ArcMap通过Python程序脚本新建工具箱与自定义工具的方法
108 1
|
SQL 开发框架 数据可视化
ArcGIS Engine学习系列1 AE基础介绍
市面上AE教程大致到ArcGIS10.2,ESRI宣布从ArcGIS10.5开始便停止AE的更新,使用AO做开发,初学者可以在学习C#语言后,从AE入门,逐渐过度到AO。不同版本下AE数据类型数量Enums:枚举类型,用于实现一些定义的内容Structs:结构体Interfaces:接口Classes:类AE开发中,为了更好地管理COM对象,ESRI将这些COM对象放到不同的组件库中。
305 0