如何建立一个新的图层?所建立的图层是永久的还是临时的?
如何获得已有的图层对象?
如何创建一个图元,并设置图元的属性?并且在图层中绘制出来?
如何建立一个新的图层?所建立的图层是永久的还是临时的?
可以使用layers对象的CreateLayer方法
CreateLayer方法使您可以创建新的临时或永久Maplnfo表图层。所创建的表有一列名,用于标注和数据绑定。当要添加或更新图元时,Name属性将会放人图元名称列中。
函数原形:
CreateLayer(Name,[FileSpec],[Position],[KeyLength],[CoordSys])
参数含义:
Name
指定图层的名称(图层的用户名)。
FileSpec
变体型:所创建图层位置的路径名。文件名应包括.tab扩展名其他组 成Maplnfo表的文件(.map,·dat,等等)在与.tab文件的相同路径下创 建。如果没有给定文件名,则创建临时图层,当地图或OCX被删除。
Position
变体型:它在图层列表中的初始位置。如果省略,自动图层定位运算法则将给图层分派基于图层类型的图层顺序。
KeyLength
变体型:添加到表中放置图元名称的列的长度。如果省略,默认
CoordSys
变体型:CoordSys对象,指定存储新图层的坐标系。可选;如果省略,使用Map.NumericCoordSys属性。
如何获得已有的图层对象?
CMapXLayer layer = m_ctrlMapX.GetLayers().Item("scratch layer");
如何创建一个图元,并设置图元的属性?并且在图层中绘制出来?
以下代码实现了创建一个临时图层并在土层中绘制一个文本类型的图元
CMapX m_ctrlMapX;
CMapXLayer m_lyrMapXLayer;
m_lyrMapXLayer = m_ctrlMapX.GetLayers().CreateLayer("TempLayer",NULL,1,32);
m_ctrlMapX.GetLayers().SetAnimationLayer(m_lyrMapXLayer);
CMapXFeature m_ftrMapXFeature;
m_ftrMapXFeature.CreateDispatch(m_ftrMapXFeature.GetClsid());
m_ftrMapXFeature.Attach(m_MapView->m_ctrlMapX.GetDispatch());
//Attach方法用来使地图的坐标系与独立图元相关联
m_ftrMapXFeature.SetType(miFeatureTypeText);
//设置类型为文本图元
m_ftrMapXFeature.SetCaption("Hello,My Deer");
m_ftrMapXFeature.SetStyle(m_ctrlMapX.GetDefaultStyle());
m_ftrMapXFeature.GetPoint().Set(126.61,45.3);
// 设定图元的风格和位置
//添加到图层
m_lyrMapXLayer.AddFeature(m_ftrMapXFeature);
给出一个创建临时图层的函数:
BOOL MapXEasy::CreateTempLayer(CMapX &ctrlMap, CString strTempLayerName)
{
try
{
CMapXLayerInfo mapLayerInfo;
mapLayerInfo.CreateDispatch(mapLayerInfo.GetClsid());
CMapXFields mapFields;
mapFields.CreateDispatch(mapFields.GetClsid());
mapFields.AddStringField("FID",254);
COleVariant vFields;
vFields.vt=VT_DISPATCH;
vFields.pdispVal=mapFields;
vFields.pdispVal->AddRef();
mapLayerInfo.SetType(miLayerInfoTypeTemp);
mapLayerInfo.AddParameter("Name",COleVariant(strTempLayerName));
mapLayerInfo.AddParameter("Fields",vFields);
CMapXLayer mapLayer=ctrlMap.GetLayers().Add(mapLayerInfo);
mapLayer.SetEditable(true);
mapLayerInfo.ReleaseDispatch();
return true;
}
catch (COleDispatchException *e)
{
e->ReportError();
e->Delete();
}
catch (COleException *e)
{
e->ReportError();
e->Delete();
}
return false;
}