转:
mapx 添加新的永久图层
MapXLayerInfo LayerInfo ;
CMapXFields MapFields ; try { LayerInfo.CreateDispatch( LayerInfo.GetClsid() ) ; MapFields.CreateDispatch( MapFields.GetClsid() ); MapFields.AddIntegerField( "C_ID" , TRUE ) ; MapFields.AddStringField( "Name" , 32 ) ; COleVariant vFields; vFields.vt = VT_DISPATCH ; vFields.pdispVal = MapFields; vFields.pdispVal->AddRef(); LayerInfo.SetType( miLayerInfoTypeNewTable ); //如果是miLayerInfoTypeTemp,则为临时图层 LayerInfo.AddParameter("Filespec" , COleVariant("文件名") ); LayerInfo.AddParameter("Name" , COleVariant("图层名") ); LayerInfo.AddParameter("Fields", vFields ); m_ctrlMapX.GetLayers().Add( LayerInfo ); } catch (COleDispatchException * e) { e->ReportError(); e->Delete(); } catch (COleException * e) { e->ReportError(); e->Delete(); } 说明:来自参考手册。 miLayerInfoTypeNewTable 参数 / 是否必须/ 说明 FileSpec 是 String:用于新表的 .tab 文件的名称。 Name 否 String:添加的图层的名称。 默认(如未指定)为 LayerX,其中 X 等于当前在地图中使用的图层数+ 1。 Fields 否 Fields 集合:指定表将拥有的列。 图元如果没有字段则为是。 Features 集合:指定用于填充表的列。默认为 none。 OverwriteFile 否String: 如果为 1,则由 FileSpec 参数指定的文件将被覆盖(如果当前存在)。 如果为 0,则将不覆盖该文件。 注:所有非 0 的值均将强制覆盖该文件。 对于 miLayerInfoTypeNewTable: • 必须使用 Fields 集合或 Features 集合,两者均可使用。 • 如果只传递 Features 集合,则 MapX 将尝试从 Features 所源自的表来获取列信息。 • 如果传递 Features 和 Fields 集合,则 MapX 将尝试从 Features 所源自的表来获取列信息。 • 如果只传递 Fields 集合,则检查用于 miDatasetLayer 类型的 Dataset。在发现之后,则对照miDatasetLayer 中的列来检查传入的 Fields。如果 miDatasetLayer Dataset 没有出现,则只在传递入的 Fields 信息上创建表。 • Fields 默认应该为 Features 集合的源表中发现的列。 |