CMApx 5 内置的紧缩表函数

来源:互联网 发布:搜狐网络大厦有食堂吗 编辑:程序博客网 时间:2024/04/19 05:59

前一段时间,由于需要对mapx 表 进行紧缩,所以查找办法,大都是通过临时图层过渡。但是网上的vc 代码似乎有一个bug ,会造成相关的图层文件无法重新创建。

 

于是通过网络搜索发现了另外一个方法:经过测试,代码无误。(非常感谢提供代码的朋友,不知是如何获得的代码?)

 

 

mapx5.0已经实现了紧缩表的功能,但用vc开发的时候,却找不到那个pack函数。因此,按照下面的方法做,就可实现该功能。

 

1、找到mapx.h 文件,将以下代码插入到CMapXLayer类申明的Operations之Public:下即可

 

BOOL SupportsPack(long PackType);

void Pack(long PackType);

 

 

2、将以下声明加入mapx.h头部的enum 声明处

enum LayerPackConstants

{

miPackGraphics = 1,

miRebuildGraphics = 2,

miPackIndex = 4,

miPackRebuildIndex = 8,

miPackData = 16,

miPackCompactDB = 32,

miPackAll = 21 //miPackGraphics & miPackIndex & miPackData;

};  

 

 

3、将以下代码加入例子自带的MapX.cpp

BOOL CMapXLayer::SupportsPack(long PackType)

{

BOOL result;

static BYTE parms[] =   VTS_I4;

InvokeHelper(0x35, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms,   PackType);

return result;

}

void CMapXLayer::Pack(long PackType)

{

static BYTE parms[] =   VTS_I4;

InvokeHelper(0x36, DISPATCH_METHOD, VT_EMPTY, NULL, parms,   PackType);

}

 

 

4、使用方式

CMapXLayer layer = m_ctrlMapX.GetLayers().Item(index);

layer.Pack(miPackAll);