中国地图
GIS探索者
地图网
GIS论坛
网站首页| GIS论坛 |新闻动态 | 技术专栏 | GIS书籍 | 资源下载 | 求职招聘 | 研究生考试 | GIS博客 | GIS空间站
欢迎光临GIS空间站!   网站地图
  专栏导航:| ArcGIS | MapInfo | TopMap | 地理信息 | 遥感 | GPS | 测绘 | WebGIS | LBS | 前沿 | 数据库 | 开发 | 行业应用
  推荐栏目:| AO开发 | 业界动态 | GIS资源 | 招聘信息 | 求职简历 | 共享软件 | 电子书籍 | 研究生考题 | 电子期刊 | GIS论文
您现在的位置: GIS空间站 >> 技术专栏 >> ArcGIS >> AO开发 >> 文章正文

AO开发笔记(实战篇)-用VC+AO开发独立的应用程序(3)

作者:Snoopy    文章来源:中国3S网站(httpwww.863s.com)    点击数:    更新时间:2006-12-11
 
你可能发现我们的程序加载的地图是在设置MapControl控件属性时指定的,在本节我们将实现如下新功能:

1.从shp文件加载图层数据。

2.实现图层管理的一些功能,如:图层显示/隐藏、图层叠加顺序调整、图层的删除。

 

一、添加从shp文件加载图层数据功能

首先去掉MapContrl属性里面默认打开的地图文档或默认加载的图层,然后在工具栏添加新的按钮,按钮ID和提示文本如下:

ID_ADD_LAYER_FRMSHP     "shp文件加载图层\nshp文件加载图层"

            接下来为类添加该按钮的响应函数,并在函数中添加如下代码(红色部分):

// shp文件加载数据

void CAOExStep1View::OnAddLayerFrmshp()

{

    // 显示选择shp文件的对话框

    const TCHAR * szFilters = _T("shp File (*.shp)|*.shp||");

    CFileDialog         mDlg(TRUE, NULL, NULL, OFN_FILEMUSTEXIST|

OFN_HIDEREADONLY, szFilters);

    if (mDlg.DoModal() == IDCANCEL) return;

    // 获取文件路径和名称

    CString sztemp = mDlg.GetPathName();

    CString szFileName,szPath;

    szFileName = sztemp.Left(sztemp.ReverseFind('\\')+1);

    szPath = sztemp.Mid(sztemp.ReverseFind('\\')+1);

    // 添加新图层

    m_ipMapControl->AddShapeFile(CComBSTR(szFileName),CComBSTR(szPath));

}

保存修改编译,运行点击加载图层工具栏按钮就可以看到如下画面:

 

二、添加图层管理功能

            首先在工具栏添加新的按钮,按钮ID和提示文本如下:

ID_LAYER_MANAGE                     "图层管理\n图层管理"

然后我们添加一个图层管理的对话框,在里面添加一个Listctrl三个按钮,如下图:

几个控件的ID分别为:

IDC_LIST_LAYER

IDC_BTN_UP

IDC_BTN_DOWN

IDC_BTN_DEL

其中IDC_LIST_LAYER的样式为Report

设置完毕,为该对话框添加类ClayerManageDlg,并且为IDC_LIST_LAYER添加一个控件变量CListCtrl            m_listLayer,再添加几个按钮的响应函数,以及对话框初始化函数(OnInitDialog())。然后再添加如下函数和成员变量:

void RefreshMap();        // 刷新地图

BOOL GetAllLayer();      // 获取所有图层

IMapControl3Ptr m_ipMapControl;          // 地图控件

CImageList  m_ImageList;// LIST图形列表

m_ipMapControl用来保存传递过来的MapControl指针,我们更改一下默认的构造函数,在对话框构造函数里面初始化改变量,代码如下:

 

// LayerManageDlg.h : header file 下面为头文件中函数内容

CLayerManageDlg(IMapControl3Ptr ipMapControl,CWnd* pParent = NULL

// LayerManageDlg.cpp : implementation file 下面为cpp文件中函数内容

CLayerManageDlg::CLayerManageDlg(IMapControl3Ptr ipMapControl,CWnd* pParent /*=NULL*/)

    : CDialog(CLayerManageDlg::IDD, pParent)

{

    m_ipMapControl = ipMapControl;

}

在对话框初始化函数里面我们需要加入如下代码以初始化ListCtrl并获取图层:

// 新建ImageList,然后从ICON里面加载

m_ImageList.Create(16, 16, ILC_COLOR32, 0, 1);

m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON_LAYER));

// 设置LIST图像列表,样式,添加Column

m_listLayer.SetImageList(&m_ImageList,LVSIL_SMALL);

m_listLayer.SetExtendedStyle(LVS_EX_CHECKBOXES|LVS_EX_FULLROWSELECT);

m_listLayer.InsertColumn(0,"图层名称",LVCFMT_LEFT,200);

GetAllLayer();    // 获取当前地图的图层并添加到LIST

文章录入:gissky    责任编辑:gissky  发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
■■相 关 图 书:
■■相 关 文 章:
  • AO开发笔记(实战篇)-用VC+AO开发独立的应用程序(3)续2

  • AO开发笔记(实战篇)-用VC+AO开发独立的应用程序(3)续1

  • AO开发笔记(实战篇)-用VC+AO开发独立的应用程序(2)续

  • AO开发笔记(实战篇)-用VC+AO开发独立的应用程序(2)

  • AO开发笔记(实战篇)-用VC+AO开发独立的应用程序(1)

  • 上一篇文章:

  • 下一篇文章:
  •  
    GIS博客精华
    热点文章
    热门资源
     
    关于我们 | 联系我们 | 广告服务 | 友情链接 | 申请链接 | 合作联盟 | 诚聘英才
      GIS空间站(GISSky.Net)版权所有 站长:兔八哥