|
注:本工程是在地图基本操作工程MapOperation基础上进行的对象编辑,它的一些实现步骤和MapOperation相同,这里只介绍重要的实现步骤和方法,详细的对象编辑参见editor工程和MapOperation工程(有详细的注释)。
1、新建一个单文档界面的工程,命名为editor;
2、改造原有的菜单,按 “三、说明及约定”中第一条所说的设置;
3、改造原有的工具条,按 “三、说明及约定”中第一条所说的设置;
4、添加三个对话框类:CDlgSelect、CDlgLayerManager、CDlgSelectLayer,其中:
CDlgSelect是在选择要打开的地图或选择要添加的数据集时使用,添加的成员变量和函数如下:
定义变量:
CComboBox m_cmbDataSource; //数据源列表
CListCtrl m_lstDataset; //数据集列表
CImageList m_ImageList; //数据集类型图像列表
bool m_bMap; //列表框中是否显示地图名【输入】
CString m_strMapName; //地图名【输出】
CString m_strDatasourceAlias; //数据源别名【输出】
CString m_strDatasetName; //数据集名【输出】
成员函数:
void AddMap(); //将地图名加入列表框中
void BuildColumns(int nCols, int *nWidth, CString *csCol); //创建列表框的列
void BuildRows( int nRows, CString *pcValue, int nImage ); //创建列表框的行
void AddDataset(); //将数据集信息加入列表框中 virtual BOOL OnInitDialog(); //初始化对话框
virtual void OnOK(); //响应确定按钮操作
afx_msg void OnCancel(); //响应取消按钮操作
afx_msg void OnSelchangeComboDatasource(); //更新数据集列表
使用说明:
当点击“文件—打开地图”时,如果文件存在地图,则打开该对话框,该对话框中显示的是地图名称列表,选择相应的地图名,就可以打开了,如果没有地图,则新建一个地图,再点击“文件—添加图层”,弹出该对话框,这时对话框显示的是当前工作空间的所有数据源及其相应的数据集列表,选择要添加的数据集即可。
***********************************************************************
CDlgLayerManager是图层管理对话框类,可以实现图层的移动、属性的设置等功能,添加的成员变量和函数如下:
成员变量:
CSeMapWnd *m_pMapWnd; //用以显示地图【输入】
Int m_nCurRow; //当前选中的行
BOOL m_bLstClicked; //当显示比例Edit聚焦后判断,失去焦点后,是否点击了listLayer
成员函数:
BOOL FillList(); //将图层名添加到列表中
void SetMoveButtonState(int nRow); //设置移动按钮的状态
void CSeDlgLayerManager::OnButtonDelete() //删除图层
void CSeDlgLayerManager::OnButtonMoveBottom() //移动图层到最底层
void CSeDlgLayerManager::OnButtonMoveDown() //图层下移
void CSeDlgLayerManager::OnButtonMoveTop() //移动图层到最顶层
void CSeDlgLayerManager::OnButtonMoveUp() //图层上移
void CSeDlgLayerManager::OnCheckSelectable() //设置图层是否可选择
void CSeDlgLayerManager::OnCheckSnapable() //设置图层是否可捕捉
void CSeDlgLayerManager::OnCheckVisible() //设置图层是否可见 //点击图层列表,显示图层的属性信息(如可编辑等)
void CSeDlgLayerManager::OnClickListLayer(NMHDR* pNMHDR, LRESULT* pResult)
BOOL CSeDlgLayerManager::OnInitDialog() //初始化
void CSeDlgLayerManager::OnKillfocusEditMaxscale() //设置最大比例
void CSeDlgLayerManager::OnKillfocusEditMinscale() //设置最小比例
void CSeDlgLayerManager::OnOK() //关闭对话框,保存地图
void CSeDlgLayerManager::OnSetfocusEditMaxscale() //判断显示最大比例文本框是否聚焦
void CSeDlgLayerManager::OnSetfocusEditMinscale() //判断显示最小比例文本框是否聚焦
使用说明:
点击“地图—图层管理”菜单时,显示该对话框,对话框中将列出当前地图中图层的名字,提供图层移
动的按钮和图层属性的设置选择按钮等功能。
***************************************************************************
CDlgSelectLayer是选择可编辑图层对话框类,添加的成员变量和函数如下:
成员变量:
CSeMapWnd *m_pMapWnd; //用以显示地图【输入】
CString m_strLayerName; //可编辑图层名【输出】
成员函数:
void SetLayerName(); //设置图层名
CString GetLayerName(); //得到图层名
BOOL CDlgSelectLayer::OnInitDialog(); //初始化
void CDlgSelectLayer::OnOK(); //关闭对话框,并将选择的图层名赋给m_strLayerName变量
void CDlgSelectLayer::OnSelchangeComboLayername(); //更新图层列表
使用说明:
在编辑几何对象前,需要选择可编辑图层,点击“编辑—选择编辑层”菜单时,显示该对话框,对话框中将列出当前地图中图层的名字。
|