阅读:5167回复:14
[讨论]在vc里创建了一个工程(使用ao)(二)
<P>4、在stdafx。h文件中添加如下代码:</P>
<P>#import "d:\Program Files\ArcGIS\COM\esriSystemUI.olb" raw_interfaces_only raw_native_types no_namespace named_guids exclude("OLE_COLOR", "OLE_HANDLE")<BR>#import "d:\Program Files\ArcGIS\COM\esriFramework.olb" raw_interfaces_only raw_native_types no_namespace named_guids exclude("OLE_COLOR", "OLE_HANDLE")</P> <P>#import "d:\Program Files\ArcGIS\COM\esriSystem.olb" raw_interfaces_only raw_native_types no_namespace named_guids exclude("OLE_COLOR", "OLE_HANDLE")<BR>#import "d:\Program Files\ArcGIS\COM\esriArcMapUI.olb" raw_interfaces_only raw_native_types no_namespace named_guids exclude("OLE_COLOR", "OLE_HANDLE")<BR>#import "d:\Program Files\ArcGIS\COM\esriCarto.olb" raw_interfaces_only raw_native_types no_namespace named_guids exclude("OLE_COLOR", "OLE_HANDLE")<BR>#import "d:\Program Files\ArcGIS\COM\esriCartoUI.olb" raw_interfaces_only raw_native_types no_namespace named_guids exclude("OLE_COLOR", "OLE_HANDLE")<BR>#import "d:\Program Files\ArcGIS\COM\esriCatalogUI.olb" raw_interfaces_only raw_native_types no_namespace named_guids exclude("OLE_COLOR", "OLE_HANDLE")<BR>#import "d:\Program Files\ArcGIS\COM\esriGeoDatabaseUI.olb" raw_interfaces_only raw_native_types no_namespace named_guids exclude("OLE_COLOR", "OLE_HANDLE")</P> <P>#import "D:\Program Files\ArcGIS\COM\esriGeoDatabase.olb" raw_interfaces_only raw_native_types no_namespace named_guids exclude("OLE_COLOR", "OLE_HANDLE")<BR>#import "D:\Program Files\ArcGIS\COM\esriGeometry.olb" raw_interfaces_only raw_native_types no_namespace named_guids exclude("OLE_COLOR", "OLE_HANDLE")</P> <P>#import "D:\Program Files\ArcGIS\COM\esriArcMap.olb" raw_interfaces_only raw_native_types no_namespace named_guids exclude("OLE_COLOR", "OLE_HANDLE")<BR>#import "d:\Program Files\ArcGIS\BIN\MapControl.ocx" raw_interfaces_only raw_native_types no_namespace named_guids <BR></P> <P>注意,如果是8.3,则只需要#inport esricore库文件即可</P> <P>5、在视图类中添加两个变量:</P> <P> IMapControl2Ptr m_ipMapControl;<BR> IMapPtr m_ipMap;</P> |
|
1楼#
发布于:2010-06-04 08:20
终于知道怎么错了,原来是没获得m_ipMap的值,只要在函数的第一行加上m_ipMap = m_ctrlMap.get_Map();就行了,m_ctrlMap是加入的空间,呵呵<div><br><div><br></div></div>
|
|
2楼#
发布于:2010-06-04 07:41
这样好像会有内存错误啊,兄弟姐妹们帮帮忙<div><div>void MapComposer::addShpLayer()</div><div>{</div><div> HRESULT hr;</div><div> IActiveViewPtr ipActiveView(m_ipMap);</div><div> IDisplayPtr pDis;(ipActiveView);</div><div> IGxDialogPtr ipGxDialog(CLSID_GxDialog);</div><div> IGxObjectFilterCollectionPtr pGxObjectFilterCollect(ipGxDialog);</div><div> IGxObjectFilterPtr ipGxObjectFilter(CLSID_GxFilterDatasets);</div><div> pGxObjectFilterCollect->AddFilter(ipGxObjectFilter,TRUE);</div><div><br></div><div> IGxObjectFilterPtr pGxObjectFilter(CLSID_GxFilterDatasets);</div><div> pGxObjectFilterCollect->AddFilter(pGxObjectFilter,FALSE);</div><div> ipGxDialog->put_AllowMultiSelect(VARIANT_TRUE);</div><div> ipGxDialog->put_Title(CComBSTR("选择数据"));</div><div> IEnumGxObjectPtr ipEnumGxObject;</div><div> VARIANT_BOOL bResult;</div><div> hr = ipGxDialog->DoModalOpen(0,;ipEnumGxObject,;bResult);</div><div> if(FAILED(hr)) return;</div><div> if(bResult == VARIANT_FALSE) return;</div><div> hr = ipEnumGxObject->Reset();</div><div> IFeatureLayerPtr ipFeatureLayer(CLSID_FeatureLayer);</div><div> IGxObjectPtr ipGxObject;</div><div> while (!ipEnumGxObject->Next(;ipGxObject))</div><div> {</div><div> IGxDatasetPtr ipGxDataset(ipGxObject);</div><div> if(ipGxDataset != 0)</div><div> {</div><div> IDatasetPtr ipDataset;</div><div> hr = ipGxDataset->get_Dataset(;ipDataset);</div><div> if(FAILED(hr)) return;</div><div> IFeatureClassPtr ipFeatureClass(ipDataset);</div><div> hr = ipFeatureLayer->putref_FeatureClass(ipFeatureClass);</div><div> if(FAILED(hr)) return;</div><div> hr = ipFeatureLayer->put_Visible(VARIANT_TRUE);</div><div> if(FAILED(hr)) return;</div><div> ILayerPtr ipLayer(ipFeatureLayer);//这个地方出错</div><div> hr = m_ipMap->AddLayer(ipLayer);</div><div> if(FAILED(hr)) return;</div><div> }</div><div> }</div><div> IEnvelopePtr ipEnv;</div><div> hr = ipActiveView->get_FullExtent(;ipEnv);</div><div> if(FAILED(hr)) return;</div><div> hr = ipActiveView->put_Extent(ipEnv);</div><div> if(FAILED(hr)) return;</div><div> hr = ipActiveView->Refresh();</div><div> if(FAILED(hr)) return;</div><div>}</div></div><div>新建一个类,老是出现内存错误</div>
|
|
3楼#
发布于:2008-04-14 19:23
<img src="images/post/smile/dvbbs/em01.gif" /><img src="images/post/smile/dvbbs/em01.gif" />
|
|
4楼#
发布于:2008-03-18 21:17
<P>楼主代码利有些错误,下面我给出在9.0利面调试通过的代码,对于MapControl等空间设置同楼主:</P>
<P>在StdAfx.h中加入:(注意要按顺序,类库的路径自己换)</P> <P>#pragma warning(push)<BR>#pragma warning(disable:4192)<BR>#pragma warning(disable:4146)<BR>#pragma warning(disable:4099)</P> <P>#import "com\esriSystem.olb" raw_interfaces_only,raw_native_types,no_namespace,named_guids,exclude("OLE_HANDLE","OLE_COLOR")</P> <P>#import "com\esriSystemUI.olb" raw_interfaces_only,raw_native_types,no_namespace,named_guids,exclude("OLE_HANDLE","OLE_COLOR")<BR>#import "com\esriGeometry.olb" raw_interfaces_only,raw_native_types,no_namespace,named_guids,exclude("OLE_HANDLE","OLE_COLOR")</P> <P>#import "com\esriGeoDatabase.olb" raw_interfaces_only,raw_native_types,no_namespace,named_guids,exclude("OLE_HANDLE","OLE_COLOR")<BR>#import "com\esriDisplay.olb" raw_interfaces_only,raw_native_types,no_namespace,named_guids,exclude("OLE_HANDLE","OLE_COLOR")</P> <P>#import "com\esriCarto.olb" raw_interfaces_only,raw_native_types,no_namespace,named_guids,exclude("OLE_HANDLE","OLE_COLOR")<BR>#import "com\esriDataSourcesFile.olb" raw_interfaces_only,raw_native_types,no_namespace,named_guids,exclude("OLE_HANDLE","OLE_COLOR")<BR>#import "com\esriCatalogUI.olb" raw_interfaces_only,raw_native_types,no_namespace,named_guids,exclude("OLE_HANDLE","OLE_COLOR")</P> <P>#import "com\esriCatalog.olb" raw_interfaces_only,raw_native_types,no_namespace,named_guids,exclude("OLE_HANDLE","OLE_COLOR")</P> <P><BR>#pragma warning(pop)</P> <P>在MyMapView.cpp中加入</P> <P>#include "atlbase.h"//解决CComBSTR' : undeclared identifier问题</P> <P>在添加shapefile的函数利面加入如下代码:</P> <P>void CMyMapView::OnAddmydata() <BR>{<BR> // TOD Add your command handler code here<BR> HRESULT hr;</P> <P> IActiveViewPtr ipActiveView(m_ipMap);<BR> IDisplayPtr pDisp(ipActiveView);<BR> <BR> IGxDialogPtr ipGxDialog(CLSID_GxDialog);<BR> IGxObjectFilterCollectionPtr pGxObjectFilterCollect(ipGxDialog);<BR> IGxObjectFilterPtr ipGxObjectFilter(CLSID_GxFilterDatasets);<BR> pGxObjectFilterCollect->AddFilter(ipGxObjectFilter,TRUE);<BR> IGxObjectFilterPtr pGxObjectFileter(CLSID_GxFilterFiles);<BR> pGxObjectFilterCollect->AddFilter(pGxObjectFileter,FALSE);<BR> ipGxDialog->put_AllowMultiSelect(VARIANT_TRUE);<BR> ipGxDialog->put_Title(CComBSTR("选择数据"));<BR> <BR> IEnumGxObjectPtr ipEnumGxObject;<BR> VARIANT_BOOL bResult;<BR> hr = ipGxDialog->DoModalOpen(0,;ipEnumGxObject,;bResult);<BR> if(FAILED(hr)) <BR> return;<BR> <BR> hr = ipEnumGxObject->Reset();<BR> IFeatureLayerPtr ipFeatureLayer(CLSID_FeatureLayer);<BR> <BR> IGxObjectPtr ipGxObject;<BR> while(!ipEnumGxObject->Next(;ipGxObject))<BR> {<BR> IGxDatasetPtr ipGxDataset(ipGxObject);<BR> if(ipGxDataset !=0)<BR> {<BR> IDatasetPtr ipDataset;<BR> hr = ipGxDataset->get_Dataset(;ipDataset);<BR> if(FAILED(hr))<BR> return;<BR> <BR> IFeatureClassPtr ipFeatureClass(ipDataset);<BR> hr = ipFeatureLayer->putref_FeatureClass(ipFeatureClass);<BR> if(FAILED(hr))<BR> return;<BR> <BR> hr = ipFeatureLayer->put_Visible(VARIANT_TRUE);<BR> <BR> if(FAILED(hr))<BR> return;<BR> <BR> ILayerPtr ipLayer(ipFeatureLayer);<BR> hr = m_ipMap->AddLayer(ipLayer);<BR> if(FAILED(hr))<BR> return;<BR> <BR> }<BR> }<BR> <BR> IEnvelopePtr ipEnv;<BR> hr = ipActiveView->get_FullExtent(;ipEnv);<BR> if(FAILED(hr))<BR> return;<BR> <BR> hr = ipActiveView->put_Extent(ipEnv);<BR> if(FAILED(hr))<BR> return;<BR> <BR> hr = ipActiveView->Refresh();<BR> if(FAILED(hr))<BR> return;<BR> </P> <P> AfxMessageBox("Test One SUCCESS");<BR>}<BR></P> |
|
5楼#
发布于:2006-08-21 16:49
<P>如果是arcgis9.0添加什么???</P>
|
|
6楼#
发布于:2006-02-22 18:19
<P>不错,顶先!</P><img src="images/post/smile/dvbbs/em01.gif" />
|
|
7楼#
发布于:2006-02-17 12:23
<P>这些代码在ArcObject开发一书中好象看到过,是否是此书上参考过的?</P>
|
|
8楼#
发布于:2006-02-17 00:00
最后编译,然后点击打开,确定要打开的shp文件,打开就行了;
|
|
9楼#
发布于:2006-02-16 23:59
<P>IenvelopePtr ipEnv;<BR> hr = ipActiveView->get_FullExtent(;ipEnv);<BR> if(FALIED(HR))<BR> return;</P>
<P> hr = ipActiveView->put_Full_Extent(ipEnv);<BR> if(FALIED(HR))<BR> return;</P> <P> hr = ipActiveView->Refresh();<BR> if(FALIED(HR))<BR> return;</P> |
|
上一页
下一页