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

我的第一个MFC的ArcGIS Engine程序_第1张图片

2)在MFC AppWizard-step1中选择Single Document选项。然后默认到最后,在Base class中选择CFromView,再点击完成。

我的第一个MFC的ArcGIS Engine程序_第2张图片

2.添加AE控件

1)从“工程”菜单,找到添加工程——Components and Controls…,打开Components and Controls Gallery对话框,双击Registered ActiveX Controls文件夹,选择Esri MapControl,单击insert,弹出的对话框点击确定和OK

我的第一个MFC的ArcGIS Engine程序_第3张图片

2)同样的方法,添加TOC Control、ToolBarControl、LicenseControl,这些控件都出现在控件工具条上,并且向窗体添加各控件

我的第一个MFC的ArcGIS Engine程序_第4张图片

3.设置控件并建立关联

1)右击MapControl打开Properties,设置Control属性页

我的第一个MFC的ArcGIS Engine程序_第5张图片

2)设置ToolbarControl的Properties,在Items中点击Add,打开Controls Commands对话框,设置工具条属性,在Generic和Map Navigation列表中选择常用的命令拖到(或双击)工具条上。

我的第一个MFC的ArcGIS Engine程序_第6张图片

3)右键建立类向导(或者Ctrl+W),给MapControl、TOCControl、ToolbarControl分别添加对应的成员变量m_ctrlMap、m_ctrlTOC、m_ctrlToolBar,点击OK

我的第一个MFC的ArcGIS Engine程序_第7张图片

 

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. }  


程序运行结果如下:

我的第一个MFC的ArcGIS Engine程序_第8张图片

4.设置地图控件大小

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

我的第一个MFC的ArcGIS Engine程序_第9张图片

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

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

我的第一个MFC的ArcGIS Engine程序_第10张图片

修改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

你可能感兴趣的:(Engine,arcgis)