




已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
AO開發(fā)筆記(實戰(zhàn)篇)用VC+AO開發(fā)獨立的應用程序(1)AO開發(fā)筆記(實戰(zhàn)篇)用VC+AO開發(fā)獨立的應用程序(1) 作者:Snoopy 轉(zhuǎn)貼自:本站原創(chuàng) 點擊數(shù):679 文章錄入:snoopy 一、AO簡介 ArcObject(以下簡稱AO)是ESRI公司構(gòu)建ArcGIS系列軟件的基礎技術框架,是一個龐大的COM組件集。AO不是為最終用戶提供的,它是為開發(fā)人員提供的二次開發(fā)組件,通過AO用戶可以實現(xiàn)功能強大的應用軟件,據(jù)說如果水平足夠高,用它可以開發(fā)出一套ArcMap來。只要用戶購買來ESRI的產(chǎn)品,都會擁有AO組件,從ArcGIS9.0開始,ESRI推出了ArcEngine,使得用AO開發(fā)的程序不再需要ArcGIS Desktop,只需要購買安裝ArcEngine運行時即可。 由于AO是基于COM技術開發(fā)出的組件式GIS開發(fā)產(chǎn)品,因此可以選擇自己熟悉的支持COM標準的開發(fā)平臺來進行GIS應用開發(fā),如:Visual C+、Visual Basic、Delphi、.NET等,另外也可以在ArcGIS上使用VBA環(huán)境進行二次開發(fā)。 在真正用AO來進行GIS應用開發(fā)之前,至少需要熟悉一種開發(fā)平臺、COM開發(fā)的一些基本知識。在以后的文章中將以Visual C+6.0為開發(fā)工具進行介紹,并且假定你對Visual C+6.0有一定的了解,對COM應用也有一定的認識。 在我們開始編寫第一個程序之前,你的系統(tǒng)中除了要安裝Visual C+6.0之外,還應該安裝有ArcGIS Desktop 和ArcGIS DeveloperKit,或者裝有ArcEngine開發(fā)包和運行包。在ArcGIS DeveloperKit和ArcEngine開發(fā)包里都有AO的開發(fā)文檔以及幾種開發(fā)語言的實例,一般安裝在:ArcGIS安裝路徑ArcGISDeveloperKit下面。在開發(fā)文檔中除了各種接口和類的介紹外,還有DeveloperKitsamples下面的實例的介紹,里面有許多實用的例子是我們學習AO編程好資料。二、實現(xiàn)一個簡單的AO程序 接下來我們就從最簡單的一個可以打開地圖的例子開始。 首先新建一個MFC的項目,如下圖:1點擊OK按鈕進入下一步:2選擇Single document點擊Next在后面的幾步中選擇默認設置,在最后一步時,選擇View類的基類為CFormView,如下圖:3點擊Finish,新的項目就建好了。接下來右鍵點擊From對話框,在出現(xiàn)的菜單里選擇Insert ActiveX Controls。4在出現(xiàn)的對話框里選擇ESRI MapControl,確定。5接下來查看修改ESRI MapControl的屬性(如下圖),選擇Control頁,在Map Document:處選擇一個mxd/mxt/pmf文件,即要加載的地圖文檔。6或者選擇Map頁(如下圖:),在右邊的list中添加圖層也可。7保存修改,編譯程序。運行就可以看到一個簡單顯示地圖的程序了(如下圖)。8三、本章小結(jié) 上面只是一個簡單實例,里面有許多功能都沒有,當你把程序窗口最大化時你會發(fā)現(xiàn),地圖窗口沒有隨窗口放大。在下一節(jié)我們將完善這個功能,并添加地圖漫游的一些功能。 作者:Snoopy轉(zhuǎn)自3S技術AO開發(fā)筆記(實戰(zhàn)篇)用VC+AO開發(fā)獨立的應用程序(2)作者:Snoopy文章來源:中國3S網(wǎng)站()點擊數(shù):4297更新時間:2006-12-11摘要:在上一節(jié)中我們實現(xiàn)了一個簡單的顯示地圖的程序。下面我們在它的基礎上完善和添加以下新的功能:1當框架窗口大小更改時改變地圖控件窗口使之隨框架窗口增大。2增加地圖漫游功能:移動、放大、縮小、顯示全圖一、更改項目配置、添加引入庫代碼在本節(jié)中我們將使用AO提供的一些接口,所以需要更改項目配置,以及添加引用AO庫的代碼。首先打開上一節(jié)所建項目。選擇菜單Tools-Options-Directories頁在Include files里添加兩個路徑(如果你的ArcGIS的安裝目錄在其它盤,需做相應改動):C:PROGRAM FILESARCGISCOMC:PROGRAM FILESARCGISBIN在項目的StdAfx.h中添加如下代碼:/ AO引入庫#pragmawarning(push)#pragmawarning(disable: 4192)#pragmawarning(disable: 4146)#importesriSystem.olbraw_interfaces_only raw_native_types no_namespace named_guids exclude(OLE_COLOR,OLE_HANDLE,VARTYPE,IStatusBar)#importesriSystemUI.olbraw_interfaces_only, raw_native_types, no_namespace, named_guids exclude(IProgressDialog)#importesriGeometry.olbraw_interfaces_only raw_native_types no_namespace named_guids#importesriDisplay.olbraw_interfaces_only raw_native_types no_namespace named_guids#importesriGeoDatabase.olbraw_interfaces_only raw_native_types no_namespace named_guids#importesriCarto.olbraw_interfaces_only, raw_native_types, no_namespace, named_guids#importesriDataSourcesFile.olbraw_interfaces_only raw_native_types no_namespace named_guids exclude(OLE_COLOR,OLE_HANDLE)#importesriDataSourcesGDB.olbraw_interfaces_only raw_native_types no_namespace named_guids exclude(OLE_COLOR,OLE_HANDLE)#importToolbarControl.ocxraw_interfaces_only raw_native_types no_namespace named_guids#importTOCControl.ocxraw_interfaces_only raw_native_types no_namespace named_guids#importMapControl.ocxraw_interfaces_only raw_native_types no_namespace named_guids#importPageLayoutControl.ocxraw_interfaces_only raw_native_types no_namespace named_guids#importArcReaderControl.ocxraw_interfaces_only raw_native_types no_namespace named_guids#pragmawarning(pop)二、添加地圖瀏覽功能,完善地圖窗口縮放1、使MapControl隨窗口放大首先為CAOExStep1View添加一個保護類型的成員變量:IMapControl3Ptrm_ipMapControl;/地圖控件該變量保存指向MapContrl的接口指針。然后在類CAOExStep1View的成員函數(shù)OnInitialUpdate添加如下代碼初始化它(紅色部分):void CAOExStep1View:OnInitialUpdate()/此處省略其它代碼/獲取MapControl指針m_ipMapControl = GetDlgItem(IDC_MAPCONTROL1)-GetControlUnknown();為類CAOExStep1View添加窗口改變大小事件函數(shù),并在里面添加如下代碼(紅色部分):void CAOExStep1View:OnSize(UINT nType, int cx, int cy)CFormView:OnSize(nType, cx, cy);/ View窗口改變大小時改變MapControl大小if(m_ipMapControl!=NULL)CRect rc;GetClientRect(rc);GetDlgItem(IDC_MAPCONTROL1)-MoveWindow(rc);經(jīng)過上面的修改,現(xiàn)在重新編譯程序,把窗口最大化,你會看到地圖窗口隨之放大。2、接下來我們來添加地圖漫游功能首先把項目默認的工具欄按鈕全部刪除只留下關于按鈕。然后添加5個按鈕,按鈕ID和提示文本如下,按鈕的圖標可以使用ArcGIS的相應功能的圖標(ArcGIS的一些圖標保存在按照目錄的BinIcons下面,是一系列bmp文件)。ID_MAP_ARROW選擇狀態(tài)n選擇狀態(tài)ID_MAP_PAN地圖平移n地圖平移ID_MAP_ZOOMIN地圖放大n地圖放大ID_MAP_ZOOMOUT地圖縮小n地圖縮小ID_MAP_FULLEXTENT顯示全圖n顯示全圖為了處理鼠標事件我們需要為MapControl添加一個onMouseDown事件函數(shù),在類CAOExStep1View里添加上面添加的工具欄按鈕的響應函數(shù),另外我們還需要在類CAOExStep1View頭文件里添加一個標志當前鼠標操作狀態(tài)的成員變量:esriARToolm_ARTool;/鼠標當前狀態(tài)在工具欄響應函數(shù)中添加如下代碼(紅色部分):/選擇狀態(tài)void CAOExStep1View:OnMapArrow()m_ARTool = esriARToolNoneSelected;m_ipMapControl-put_MousePointer(esriPointerDefault);/地圖平移void CAOExStep1View:OnMapPan()m_ARTool = esriARToolMapPan;m_ipMapControl-put_MousePointer(esriPointerPan);/地圖放大void CAOExStep1View:OnMapZoomin()m_ARTool = esriARToolMapZoomIn;m_ipMapControl-put_MousePointer(esriPointerZoomIn);/地圖縮小void CAOExStep1View:OnMapZoomout()m_ARTool = esriARToolMapZoomOut;m_ipMapControl-put_MousePointer(esriPointerZoomOut);/顯示全圖void CAOExStep1View:OnMapFullextent()IActiveViewPtr ipActiveView;HRESULT hr=m_ipMapControl-get_ActiveView(&ipActiveView);if (FAILED(hr) return;IEnvelopePtr ipEnvelope;hr = ipActiveView-get_FullExtent(&ipEnvelope);if (FAILED(hr) return;ipActiveView-put_Extent(ipEnvelope);ipActiveView-Refresh();未完,見AO開發(fā)筆記(實戰(zhàn)篇)用VC+AO開發(fā)獨立的應用程序(2)續(xù)。AO開發(fā)筆記(實戰(zhàn)篇)用VC+AO開發(fā)獨立的應用程序(2)續(xù)作者:Snoopy文章來源:中國3S網(wǎng)站()點擊數(shù):2619更新時間:2006-12-11摘要:在鼠標事件函數(shù)中添加如下代碼(紅色部分):void CAOExStep1View:OnonMouseDownMapcontrol1(long button, long shift, long x, long y, double mapX, double mapY)if(1 = button) /鼠標左鍵按下IActiveViewPtr ipActiveView;HRESULT hr=m_ipMapControl-get_ActiveView(&ipActiveView);if (ipActiveView = NULL) return ;switch(m_ARTool)case esriARToolNoneSelected:break;case esriARToolMapZoomIn: /地圖放大IEnvelopePtr ipEnvelope;hr = ipActiveView-get_Extent(&ipEnvelope);if (FAILED(hr) return ;hr = m_ipMapControl-TrackRectangle(&ipEnvelope);if (FAILED(hr) return ;if(ipEnvelope = NULL) return ;double XMin,YMin,XMax,YMax;XMin=YMin=XMax=YMax=0.0;if(S_OK !=ipEnvelope-get_XMin(&XMin) XMin = 0.0;if(S_OK !=ipEnvelope-get_YMin(&YMin) YMin = 0.0; if(S_OK !=ipEnvelope-get_XMax(&XMax) XMax = 0.0;if(S_OK !=ipEnvelope-get_YMax(&YMax) YMax = 0.0;if(XMin!=XMax&YMin!=YMax)/用戶拉框選擇區(qū)域放大ipActiveView-put_Extent(ipEnvelope);ipActiveView-Refresh();else/用戶點擊進行放大ipActiveView-get_Extent(&ipEnvelope);if (FAILED(hr) return ;IPointPtr ipPoint(CLSID_Point);ipPoint-put_X(mapX);ipPoint-put_Y(mapY);/設置中心點為用戶點擊為主ipEnvelope-CenterAt(ipPoint);ipEnvelope-Expand(0.5, 0.5, true);ipActiveView-put_Extent(ipEnvelope);ipActiveView-Refresh();break;case esriARToolMapZoomOut: /地圖縮小IEnvelopePtr ipEnvelope;hr = ipActiveView-get_Extent(&ipEnvelope);if (FAILED(hr) return ;IPointPtr ipPoint(CLSID_Point);ipPoint-put_X(mapX);ipPoint-put_Y(mapY); ipEnvelope-CenterAt(ipPoint);/設置中心點為用戶點擊為主ipEnvelope-Expand(2, 2, true);ipActiveView-put_Extent(ipEnvelope);ipActiveView-Refresh();break;case esriARToolMapPan: /地圖平移m_ipMapControl-Pan();break;default:break;為工具欄前四個按鈕添加UPDATE_COMMAND_UI更新函數(shù),代碼如下:/更新工具欄void CAOExStep1View:OnUpdateMapArrow(CCmdUI* pCmdUI)pCmdUI-SetCheck(m_ARTool = esriARToolNoneSelected);void CAOExStep1View:OnUpdateMapPan(CCmdUI* pCmdUI)pCmdUI-SetCheck(m_ARTool = esriARToolMapPan);void CAOExStep1View:OnUpdateMapZoomin(CCmdUI* pCmdUI)pCmdUI-SetCheck(m_ARTool = esriARToolMapZoomIn);void CAOExStep1View:OnUpdateMapZoomout(CCmdUI* pCmdUI)pCmdUI-SetCheck(m_ARTool = esriARToolMapZoomOut);保存修改,編譯程序。運行就可以對地圖進行放大、縮小、平移、顯示全圖的操作了(如下圖)。三、本章小結(jié)上面我們添加了地圖漫游的功能,并使地圖窗口隨框架窗口一起縮放。你可能發(fā)現(xiàn)我們的程序加載的地圖是在設置MapControl控件屬性時指定的。我們在下一節(jié)中將實現(xiàn)從shp文件加載地圖,并實現(xiàn)圖層管理的一些功能。AO開發(fā)筆記(實戰(zhàn)篇)用VC+AO開發(fā)獨立的應用程序(3)作者:Snoopy文章來源:中國3S網(wǎng)站()點擊數(shù):3221更新時間:2006-12-11摘要:你可能發(fā)現(xiàn)我們的程序加載的地圖是在設置MapControl控件屬性時指定的,在本節(jié)我們將實現(xiàn)如下新功能:1從shp文件加載圖層數(shù)據(jù)。2實現(xiàn)圖層管理的一些功能,如:圖層顯示/隱藏、圖層疊加順序調(diào)整、圖層的刪除。一、添加從shp文件加載圖層數(shù)據(jù)功能首先去掉MapContrl屬性里面默認打開的地圖文檔或默認加載的圖層,然后在工具欄添加新的按鈕,按鈕ID和提示文本如下:ID_ADD_LAYER_FRMSHP從shp文件加載圖層n從shp文件加載圖層接下來為類添加該按鈕的響應函數(shù),并在函數(shù)中添加如下代碼(紅色部分):/從shp文件加載數(shù)據(jù)void CAOExStep1View:OnAddLayerFrmshp()/顯示選擇shp文件的對話框const TCHAR * szFilters = _T(shp File (*.shp)|*.shp|);CFileDialogmDlg(TRUE, NULL, NULL, OFN_FILEMUSTEXIST|OFN_HIDEREADONLY, szFilters);if (mDlg.DoModal() = IDCANCEL) return;/獲取文件路徑和名稱CString sztemp = mDlg.GetPathName();CString szFileName,szPath;szFileName = sztemp.Left(sztemp.ReverseFind()+1);szPath = sztemp.Mid(sztemp.ReverseFind()+1);/添加新圖層m_ipMapControl-AddShapeFile(CComBSTR(szFileName),CComBSTR(szPath);保存修改編譯,運行點擊加載圖層工具欄按鈕就可以看到如下畫面:二、添加圖層管理功能首先在工具欄添加新的按鈕,按鈕ID和提示文本如下:ID_LAYER_MANAGE圖層管理n圖層管理然后我們添加一個圖層管理的對話框,在里面添加一個Listctrl三個按鈕,如下圖:幾個控件的ID分別為:IDC_LIST_LAYERIDC_BTN_UPIDC_BTN_DOWNIDC_BTN_DEL其中IDC_LIST_LAYER的樣式為Report。設置完畢,為該對話框添加類ClayerManageDlg,并且為IDC_LIST_LAYER添加一個控件變量CListCtrlm_listLayer,再添加幾個按鈕的響應函數(shù),以及對話框初始化函數(shù)(OnInitDialog())。然后再添加如下函數(shù)和成員變量:voidRefreshMap();/刷新地圖BOOLGetAllLayer();/獲取所有圖層IMapControl3Ptrm_ipMapControl;/地圖控件CImageListm_ImageList;/ LIST圖形列表m_ipMapControl用來保存?zhèn)鬟f過來的MapControl指針,我們更改一下默認的構(gòu)造函數(shù),在對話框構(gòu)造函數(shù)里面初始化改變量,代碼如下:/ LayerManageDlg.h : header file下面為頭文件中函數(shù)內(nèi)容CLayerManageDlg(IMapControl3PtripMapControl,CWnd*pParent=NULL/ LayerManageDlg.cpp : implementation file下面為cpp文件中函數(shù)內(nèi)容CLayerManageDlg:CLayerManageDlg(IMapControl3PtripMapControl,CWnd*pParent/*=NULL*/):CDialog(CLayerManageDlg:IDD,pParent)m_ipMapControl=ipMapControl;在對話框初始化函數(shù)里面我們需要加入如下代碼以初始化ListCtrl并獲取圖層:/新建ImageList,然后從ICON里面加載m_ImageList.Create(16, 16,ILC_COLOR32, 0, 1);m_ImageList.Add(AfxGetApp()-LoadIcon(IDI_ICON_LAYER);/設置LIST圖像列表,樣式,添加Columnm_listLayer.SetImageList(&m_ImageList,LVSIL_SMALL);m_listLayer.SetExtendedStyle(LVS_EX_CHECKBOXES|LVS_EX_FULLROWSELECT);m_listLayer.InsertColumn(0,圖層名稱,LVCFMT_LEFT,200);GetAllLayer();/獲取當前地圖的圖層并添加到LIST中AO開發(fā)筆記(實戰(zhàn)篇)用VC+AO開發(fā)獨立的應用程序(3)續(xù)1作者:Snoopy文章來源:中國3S網(wǎng)站()點擊數(shù):2872更新時間:2006-12-11摘要:另外幾個函數(shù)代碼如下:/獲取所有圖層BOOLCLayerManageDlg:GetAllLayer()if(m_ipMapControl=NULL)returnFALSE;longlLayerCount=0;m_ipMapControl-get_LayerCount(&lLayerCount);CStringszLayersName;intiIndex=0;for(longi=0;iget_Layer(i,&ipLayer);if(ipLayer)BSTRbstrLayerName;ipLayer-get_Name(&bstrLayerName);VARIANT_BOOLbVisible=FALSE;ipLayer-get_Visible(&bVisible);szLayersName=bstrLayerName;:SysFreeString(bstrLayerName);m_listLayer.InsertItem(iIndex,szLayersName,0);m_listLayer.SetCheck(iIndex,bVisible);iIndex+;returnTRUE;/刷新地圖顯示voidCLayerManageDlg:RefreshMap()IActiveViewPtripActiveView;HRESULThr=m_ipMapControl-get_ActiveView(&ipActiveView);if(ipActiveView!=NULL)ipActiveView-Refresh();/上移圖層voidCLayerManageDlg:OnBtnUp()intiCurSel=m_listLayer.GetSelectionMark();if(iCurSelget_Map(&ipMap);if(FAILED(hr)return;ILayerPtripLayer;hr=ipMap-get_Layer(iCurSel,&ipLayer);if(FAILED(hr)return;hr=ipMap-MoveLayer(ipLayer,iCurSel-1);if(FAILED(hr)return;RefreshMap();CStringszLayerName=m_listLayer.GetItemText(iCurSel,0);BOOLbVisiable=m_listLayer.GetCheck(iCurSel);m_listLayer.DeleteItem(iCurSel);intiNewItem=m_listLayer.InsertItem(iCurSel-1,szLayerName,0);m_listLayer.SetCheck(iNewItem,bVisiable);/下移圖層voidCLayerManageDlg:OnBtnDown()intiCurSel=m_listLayer.GetSelectionMark();if(iCurSel=m_listLayer.GetItemCount()-1)return;IMapPtripMap;HRESULThr=m_ipMapControl-get_Map(&ipMap);if(FAILED(hr)return;ILayerPtripLayer;hr=ipMap-get_Layer(iCurSel,&ipLayer);if(FAILED(hr)return;hr=ipMap-MoveLayer(ipLayer,iCurSel+1);if(FAILED(hr)return;RefreshMap();CStringszLayerName=m_listLayer.GetItemText(iCurSel,0);BOOLbVisiable=m_listLayer.GetCheck(iCurSel);m_listLayer.DeleteItem(iCurSel);intiNewItem=m_listLayer.InsertItem(iCurSel+1,szLayerName,0);m_listLayer.SetCheck(iNewItem,bVisiable);AO開發(fā)筆記(實戰(zhàn)篇)用VC+AO開發(fā)獨立的應用程序(3)續(xù)2作者:Snoopy文章來源:中國3S網(wǎng)站()點擊數(shù):3544更新時間:2006-12-11摘要:/刪除圖層voidCLayerManageDlg:OnBtnDel()intiCurSel=m_listLayer.GetSelectionMark();if(iCurSelget_Map(&ipMap);if(FAILED(hr)return;/獲取要刪除的圖層ILayerPtripLayer;hr=ipMap-get_Layer(iCurSel,&ipLayer);if(FAILED(hr)return;ipMap-DeleteLayer(ipLayer);if(FAILED(hr)return;m_listLayer.DeleteItem(iCurSel);保存、編譯、運行,先點擊工具欄添加圖層數(shù)據(jù),然后點擊圖層管理按鈕,出現(xiàn)圖層管理的對話框,在ListCtrl中選擇一行,點擊按鈕:上移、下移、刪除,可以看到相應的效果(見下圖):在圖層列表中每行記錄前面的復選框是用來控制圖層是否可見的,因為在ListCtrl的事件函數(shù)里面沒有專門處理復選框的點擊消息的函數(shù),所以我們從ClistCtrl派生一個新的類專門處理它。在Classview頁右擊項目名稱在出現(xiàn)的菜單里面選擇New Class,添加一個新類ClistCtrlEx,類型選擇MFC Class基類選擇ClistCtrl,如下圖:在生成的新類中添加一個自定義消息,當用戶點擊復選框時向父窗口發(fā)送此消息:#
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 月月促銷活動方案
- 雜志收集活動方案
- 杭州恐龍模型活動方案
- 村規(guī)民約教育活動方案
- 機關黨建調(diào)研活動方案
- 極佳裝修活動方案
- 景區(qū)鳥類活動方案
- 村支部志愿活動方案
- 服裝七夕節(jié)活動方案
- 松陽拓展活動方案
- 地下室頂板行車與堆載驗算與加固方案
- 四年級閱讀訓練概括文章主要內(nèi)容(完美)
- YY/T 0995-2015人類輔助生殖技術用醫(yī)療器械術語和定義
- GB/T 37234-2018文件鑒定通用規(guī)范
- 高中英語讀后續(xù)寫教學策略的探究
- 2023年鹽城市阜寧縣人民醫(yī)院醫(yī)護人員招聘筆試題庫及答案解析
- 2022年動畫制作行業(yè)分析及未來五至十年行業(yè)發(fā)展報告
- 畢業(yè)論文答辯
- 染缸操作規(guī)范
- 可下載打印的公司章程
- 1p120新產(chǎn)品制造可行性報告
評論
0/150
提交評論