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 集合的源表中發現的列。