Yoyozwf
路人甲
路人甲
  • 注册日期2006-02-15
  • 发帖数39
  • QQ
  • 铜币207枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:5167回复:14

[讨论]在vc里创建了一个工程(使用ao)(二)

楼主#
更多 发布于:2006-02-16 23:55
<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>
喜欢0 评分0
yilang
路人甲
路人甲
  • 注册日期2009-04-24
  • 发帖数12
  • QQ
  • 铜币165枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2010-06-04 08:20
终于知道怎么错了,原来是没获得m_ipMap的值,只要在函数的第一行加上m_ipMap = m_ctrlMap.get_Map();就行了,m_ctrlMap是加入的空间,呵呵<div><br><div><br></div></div>
举报 回复(0) 喜欢(0)     评分
yilang
路人甲
路人甲
  • 注册日期2009-04-24
  • 发帖数12
  • QQ
  • 铜币165枚
  • 威望0点
  • 贡献值0点
  • 银元0个
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>
举报 回复(0) 喜欢(0)     评分
seagatebarracud
路人甲
路人甲
  • 注册日期2008-03-25
  • 发帖数145
  • QQ
  • 铜币414枚
  • 威望0点
  • 贡献值0点
  • 银元0个
3楼#
发布于:2008-04-14 19:23
<img src="images/post/smile/dvbbs/em01.gif" /><img src="images/post/smile/dvbbs/em01.gif" />
举报 回复(0) 喜欢(0)     评分
creakwu
路人甲
路人甲
  • 注册日期2006-03-29
  • 发帖数13
  • QQ
  • 铜币209枚
  • 威望0点
  • 贡献值0点
  • 银元0个
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>
举报 回复(0) 喜欢(0)     评分
ziyou4246
路人甲
路人甲
  • 注册日期2006-08-05
  • 发帖数5
  • QQ
  • 铜币144枚
  • 威望0点
  • 贡献值0点
  • 银元0个
5楼#
发布于:2006-08-21 16:49
<P>如果是arcgis9.0添加什么???</P>
举报 回复(0) 喜欢(0)     评分
pgisgpsrs
路人甲
路人甲
  • 注册日期2004-09-20
  • 发帖数59
  • QQ
  • 铜币405枚
  • 威望0点
  • 贡献值0点
  • 银元0个
6楼#
发布于:2006-02-22 18:19
<P>不错,顶先!</P><img src="images/post/smile/dvbbs/em01.gif" />
举报 回复(0) 喜欢(0)     评分
c_mulder
路人甲
路人甲
  • 注册日期2005-12-23
  • 发帖数42
  • QQ
  • 铜币216枚
  • 威望0点
  • 贡献值0点
  • 银元0个
7楼#
发布于:2006-02-17 12:23
<P>这些代码在ArcObject开发一书中好象看到过,是否是此书上参考过的?</P>
举报 回复(0) 喜欢(0)     评分
Yoyozwf
路人甲
路人甲
  • 注册日期2006-02-15
  • 发帖数39
  • QQ
  • 铜币207枚
  • 威望0点
  • 贡献值0点
  • 银元0个
8楼#
发布于:2006-02-17 00:00
最后编译,然后点击打开,确定要打开的shp文件,打开就行了;
举报 回复(0) 喜欢(0)     评分
Yoyozwf
路人甲
路人甲
  • 注册日期2006-02-15
  • 发帖数39
  • QQ
  • 铜币207枚
  • 威望0点
  • 贡献值0点
  • 银元0个
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>
举报 回复(0) 喜欢(0)     评分
上一页
游客

返回顶部