原文 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);
- }
- }
- }
实例源码见