Mapgis二次开发(入门)——MFC下的基本步骤
作者:刘明瓒 成都理工大学 QQ:34194203
欢迎大家转载此文,但请在转载时保证文章的完整性
开发平台:VC++6.0&&Mapgis6.75
内容:mapgis二次开发的一些基本概念和基本步骤
要求:阅读此文需要一定C++编程基础和一点MFC的知识以及一点mapgis知识。
1 概述
1.1 Mapgis二次开发的作用
扩展mapgis产品功能,以达到自己的目的。简单讲有:简化操作(将mapgis产品提供的功能包装,以前要点几下的现在点一下就可以了),功能扩展(mapgis产品没有的功能,可以通过二次开发自己实现),功能应用(自己开发的某个系统如果想使用mapgis里面的一些功能,可以通过二次开发直接拿到自己的系统中),……等等。
1.2 基本概念
有一点需要说明,mapgis二次开发所有API函数都是以“_”开头的,如_OpenPntArea_GetPnt_GetLin等等。其他概念在要碰到时在谈。
1.3 所需工具
1、 Microsoft Studio VC++6.0
2、 Mapgis6.75产品及二次开发包
以上工具网上均有免费下载, 进行一下步骤时请先下载并安装好。
2 Mfc向导与工程设置
2.1 新建工程
1)打开VC++6.0  File->New 选择【Projects】选项卡、【MFC AppWizard(exe)】、填入工程名称Mapgis_1,点击【OK】如下图:
2)选择Dialog based (为简单起见)点击【Finish】新建工程完毕
2.2 工程设置
1)点击菜单栏【Project->Setting】选择【C/C++】选项卡 Category:中选择【Code GenerationStruct member alignment选择【1 Byte】点击【OK  说明:此步设置是将C++结构体成员的内存对齐方式设置为1字节,因为mapgis6.X的开发就是采用的此对齐方式。所以非常重要,如果忘记设置程序有可能会引起一些莫名的逻辑错误。
2)添加mapgis头文件路径和mapgis库文件路径
现在假定在你机器上Mapgis及二次开发库都是按照默认路径安装的,也就是C:\mapgis67
点击菜单栏【Tools->Options 选择【Directories】选项卡
头文件需加入C:\MAPGIS67\INCLUDE 如下图:
库文件需加入C:\MAPGIS67\LIB
现在,开发环境已经配置完成。下面开始写代码了。
3 Mapgis工作区操作
3.1 初始化工作区实例
先写代码,再谈为什么要这样做。
1)在CMapgis_1App添加头文件#include "mapgis.h"
2)为CMapgis_1App添加一个成员变量AREA_HINST m_mapgisInstance;
3)添加虚函数ExitInstance(); 添加好后就如同下面:(简单起见我删除了“难看”的部分)
class CMapgis_1App : public CWinApp
{
public:
    CMapgis_1App();
    AREA_HINST m_mapgisInstance;
public:
    virtual BOOL InitInstance();
    virtual int ExitInstance();
    DECLARE_MESSAGE_MAP()
};
4)在InitInstanceapp开发实例函数中添加代码
BOOL CMapgis_1App::InitInstance()
{
    AfxEnableControlContainer();
    if((m_mapgisInstance = _InitWorkArea(m_hInstance)) <= 0)
        return FALSE;
……………………
}
5)在ExitInstance函数中添加代码
int CMapgis_1App::ExitInstance()
{
    if(_FreeWorkArea(m_mapgisInstance) == IDCANCEL)
        return FALSE;
    return CWinApp::ExitInstance();
}
说明:mapgis包含多种数据文件结构(点文件wt、线文件wl、面文件wp、网络文件wn、表格文件wb等)。每一个文件可以理解为一个工作区,工作区必须被放在一个工作区实例中。工作区实例可以理解为工作区的容器,里面可以包含很多的工作区,m_mapgisInstance工作区实例句柄, 我们只能通过工作区实例句柄访问和控制工作区实例。
_InitWorkArea函数就是用来初始化工作区实例,并返回工作区实例句柄。_InitWorkArea将工作区实例与我们的应用程序m_hInstance联系起来。我们在程序即将启动时调用它。
_FreeWorkArea该函数检查所有属于实例的工作区,并且关闭这些工作区。我们在程序即将
退出时调用它。
3.2 点工作区操作
目的:打开一个点工作区,向其中添加一个点,关闭并保存此工作区到一个点文件。
BOOL CMapgis_1Dlg::OnInitDialog()函数中添加以下代码:
    // TODO: Add extra initialization here
    CMapgis_1App* pApp = (CMapgis_1App*)AfxGetApp();
    short pai = _OpenArea(pApp->m_mapgisInstance, PNT);
    D_DOT xy;
    xy.x = 10;
    xy.y = 10;
    PNT_INFO* pinf;
    _GetPntDefParam(&pinf, PNT_NOTE);
CString dat = _T("这是一个点");
    _AppendPnt(pai, &xy, (LPSTR)(LPCSTR)dat, strlen(dat), pinf);
    CString path = _T("C:\\1.wt");
    _SaveAFile(pai, (LPSTR)(LPCSTR)path);

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。