1、 建立一个SDI程序,在stdafx.h文件中添加#include "mapgis.h"。
2、 配置工程属性:设置文件输出路径到MAPGIS SDK安装目录下的program目录下,设置字节对齐。
3、 将**View.h文件和**View.cpp文件中的CView全部替换为CGisView。
4、 在C**View的OnDraw成员函数体的最后添加CGisView::OnDraw(pDC);。
5、 为C**View类添加四个成员变量,代码片段:
AREA_HINST m_AreaHinst;
short m_LineArea;
6、 在C**View类的构造函数中加入初始化工作区实例句柄和工作区的语句,代码片段:
{
// TODO: add construction code here
m_AreaHinst = _InitWorkArea(NULL);
m_LineArea = _OpenLinArea(m_AreaHinst);
}
{
_CloseAllArea(m_AreaHinst);
_FreeWorkArea(m_AreaHinst);
}
8、
在 C**View 类中重载 CGisView 类的 _OwnerDraw(MyDC mdc) 函数,代码片段:**View.h文件:
void _OwnerDraw(MyDC mdc);
**View.cpp文件:
{
_SetMyDCMode(mdc);
_DispLinArea(mdc,m_LineArea);
}
9、 添加打开点、线、区的菜单,菜单ID:IDM_OPEN_LINE_FILE,在C**View中添加该菜单的消息处理函数OnOpenLineFile,代码片段:
{
if (_LoadFile(m_ LineArea) > 0 )
{
D_RECT rc;
_GetFileRange(_GetAreaFileName(m_ LineArea), & rc);
// 设置图形范围
_SetWinMapRange( & rc);
// 设置显示范围
_SetWinDispRect( & rc);
}
}
_SetWinMapRange和_SetWinDispRect是显示地图的关键所在,默认的图形范围和显示范围可以通过_GetWinMapRange和_GetWinDispRect取到,然后默认的范围与打开的地图文件的范围不同,所以如果不在打开文件后设置图形范围和显示范围就可能出现看不到地图的情况。
10、 CGisEditView与CGisView类似,唯一的区别是将_OwnerDraw改为DispAllMap。
11、 打开MAPGIS工程和打开单文件的情况类似,由于工程的打开一般是在文档类的OnOpenDocument中实现,而打开文档时会调用视图类的OnInitialUpdate函数,因此可以在视图类的OnInitialUpdate中设置图形范围和显示范围。
12、 为文档类添加成员变量:
13、 重载文档类的OnOpenDocument成员函数:
{
if ( ! CDocument::OnOpenDocument(lpszPathName))
return FALSE;
m_Project = _PRJLoadAProject(( char * )lpszPathName,m_AreaHinst);
return TRUE;
}
14、 在_OwnerDraw或DispAllMap中添加以下代码:
{
_PRJDisplay(pDoc -> m_Project,mdc);
}
15、 重载视图类的OnInitialUpdate成员函数:
{
CGisEditView::OnInitialUpdate();
C ** Doc * pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (pDoc -> m_Project != NULL)
{
D_RECT rc;
_PRJGetRange(pDoc -> m_Project, & rc);
_SetWinMapRange( & rc);
_SetWinDispRect( & rc);
}
}