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

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

楼主#
更多 发布于:2006-02-16 23:55

4、在stdafx。h文件中添加如下代码:

#import "d:\Program Files\ArcGIS\COM\esriSystemUI.olb" raw_interfaces_only raw_native_types no_namespace named_guids exclude("OLE_COLOR", "OLE_HANDLE")
#import "d:\Program Files\ArcGIS\COM\esriFramework.olb" raw_interfaces_only raw_native_types no_namespace named_guids exclude("OLE_COLOR", "OLE_HANDLE")

#import "d:\Program Files\ArcGIS\COM\esriSystem.olb" raw_interfaces_only raw_native_types no_namespace named_guids exclude("OLE_COLOR", "OLE_HANDLE")
#import "d:\Program Files\ArcGIS\COM\esriArcMapUI.olb" raw_interfaces_only raw_native_types no_namespace named_guids exclude("OLE_COLOR", "OLE_HANDLE")
#import "d:\Program Files\ArcGIS\COM\esriCarto.olb" raw_interfaces_only raw_native_types no_namespace named_guids exclude("OLE_COLOR", "OLE_HANDLE")
#import "d:\Program Files\ArcGIS\COM\esriCartoUI.olb" raw_interfaces_only raw_native_types no_namespace named_guids exclude("OLE_COLOR", "OLE_HANDLE")
#import "d:\Program Files\ArcGIS\COM\esriCatalogUI.olb" raw_interfaces_only raw_native_types no_namespace named_guids exclude("OLE_COLOR", "OLE_HANDLE")
#import "d:\Program Files\ArcGIS\COM\esriGeoDatabaseUI.olb" raw_interfaces_only raw_native_types no_namespace named_guids exclude("OLE_COLOR", "OLE_HANDLE")

#import "D:\Program Files\ArcGIS\COM\esriGeoDatabase.olb" raw_interfaces_only raw_native_types no_namespace named_guids exclude("OLE_COLOR", "OLE_HANDLE")
#import "D:\Program Files\ArcGIS\COM\esriGeometry.olb" raw_interfaces_only raw_native_types no_namespace named_guids exclude("OLE_COLOR", "OLE_HANDLE")

#import "D:\Program Files\ArcGIS\COM\esriArcMap.olb" raw_interfaces_only raw_native_types no_namespace named_guids exclude("OLE_COLOR", "OLE_HANDLE")
#import "d:\Program Files\ArcGIS\BIN\MapControl.ocx" raw_interfaces_only raw_native_types no_namespace named_guids

注意,如果是8.3,则只需要#inport esricore库文件即可

5、在视图类中添加两个变量:

IMapControl2Ptr m_ipMapControl;
IMapPtr m_ipMap;

喜欢0 评分0
默认头像
路人甲
路人甲
  • 注册日期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是加入的空间,呵呵


举报 回复(0) 喜欢(0)     评分
默认头像
路人甲
路人甲
  • 注册日期2009-04-24
  • 发帖数12
  • QQ
  • 铜币165枚
  • 威望0点
  • 贡献值0点
  • 银元0个
2楼#
发布于:2010-06-04 07:41
这样好像会有内存错误啊,兄弟姐妹们帮帮忙
void MapComposer::addShpLayer()
{
HRESULT hr;
IActiveViewPtr ipActiveView(m_ipMap);
IDisplayPtr pDis;(ipActiveView);
IGxDialogPtr  ipGxDialog(CLSID_GxDialog);
IGxObjectFilterCollectionPtr pGxObjectFilterCollect(ipGxDialog);
IGxObjectFilterPtr ipGxObjectFilter(CLSID_GxFilterDatasets);
pGxObjectFilterCollect->AddFilter(ipGxObjectFilter,TRUE);

IGxObjectFilterPtr pGxObjectFilter(CLSID_GxFilterDatasets);
pGxObjectFilterCollect->AddFilter(pGxObjectFilter,FALSE);
ipGxDialog->put_AllowMultiSelect(VARIANT_TRUE);
ipGxDialog->put_Title(CComBSTR("选择数据"));
IEnumGxObjectPtr ipEnumGxObject;
VARIANT_BOOL bResult;
hr = ipGxDialog->DoModalOpen(0,;ipEnumGxObject,;bResult);
if(FAILED(hr)) return;
if(bResult == VARIANT_FALSE) return;
hr = ipEnumGxObject->Reset();
IFeatureLayerPtr ipFeatureLayer(CLSID_FeatureLayer);
IGxObjectPtr ipGxObject;
while (!ipEnumGxObject->Next(;ipGxObject))
{
IGxDatasetPtr ipGxDataset(ipGxObject);
if(ipGxDataset != 0)
{
IDatasetPtr ipDataset;
hr = ipGxDataset->get_Dataset(;ipDataset);
if(FAILED(hr)) return;
IFeatureClassPtr ipFeatureClass(ipDataset);
hr = ipFeatureLayer->putref_FeatureClass(ipFeatureClass);
if(FAILED(hr)) return;
hr = ipFeatureLayer->put_Visible(VARIANT_TRUE);
if(FAILED(hr)) return;
ILayerPtr ipLayer(ipFeatureLayer);//这个地方出错
hr = m_ipMap->AddLayer(ipLayer);
if(FAILED(hr)) return;
}
}
IEnvelopePtr ipEnv;
hr = ipActiveView->get_FullExtent(;ipEnv);
if(FAILED(hr)) return;
hr = ipActiveView->put_Extent(ipEnv);
if(FAILED(hr)) return;
hr = ipActiveView->Refresh();
if(FAILED(hr)) return;
}
新建一个类,老是出现内存错误
举报 回复(0) 喜欢(0)     评分
默认头像
路人甲
路人甲
  • 注册日期2008-03-25
  • 发帖数145
  • QQ
  • 铜币414枚
  • 威望0点
  • 贡献值0点
  • 银元0个
3楼#
发布于:2008-04-14 19:23
举报 回复(0) 喜欢(0)     评分
默认头像
路人甲
路人甲
  • 注册日期2006-03-29
  • 发帖数13
  • QQ
  • 铜币209枚
  • 威望0点
  • 贡献值0点
  • 银元0个
4楼#
发布于:2008-03-18 21:17

楼主代码利有些错误,下面我给出在9.0利面调试通过的代码,对于MapControl等空间设置同楼主:

在StdAfx.h中加入:(注意要按顺序,类库的路径自己换)

#pragma warning(push)
#pragma warning(disable:4192)
#pragma warning(disable:4146)
#pragma warning(disable:4099)

#import "com\esriSystem.olb" raw_interfaces_only,raw_native_types,no_namespace,named_guids,exclude("OLE_HANDLE","OLE_COLOR")

#import "com\esriSystemUI.olb" raw_interfaces_only,raw_native_types,no_namespace,named_guids,exclude("OLE_HANDLE","OLE_COLOR")
#import "com\esriGeometry.olb" raw_interfaces_only,raw_native_types,no_namespace,named_guids,exclude("OLE_HANDLE","OLE_COLOR")

#import "com\esriGeoDatabase.olb" raw_interfaces_only,raw_native_types,no_namespace,named_guids,exclude("OLE_HANDLE","OLE_COLOR")
#import "com\esriDisplay.olb" raw_interfaces_only,raw_native_types,no_namespace,named_guids,exclude("OLE_HANDLE","OLE_COLOR")

#import "com\esriCarto.olb" raw_interfaces_only,raw_native_types,no_namespace,named_guids,exclude("OLE_HANDLE","OLE_COLOR")
#import "com\esriDataSourcesFile.olb" raw_interfaces_only,raw_native_types,no_namespace,named_guids,exclude("OLE_HANDLE","OLE_COLOR")
#import "com\esriCatalogUI.olb" raw_interfaces_only,raw_native_types,no_namespace,named_guids,exclude("OLE_HANDLE","OLE_COLOR")

#import "com\esriCatalog.olb" raw_interfaces_only,raw_native_types,no_namespace,named_guids,exclude("OLE_HANDLE","OLE_COLOR")


#pragma warning(pop)

在MyMapView.cpp中加入

#include "atlbase.h"//解决CComBSTR' : undeclared identifier问题

在添加shapefile的函数利面加入如下代码:

void CMyMapView::OnAddmydata()
{
// TOD Add your command handler code here
HRESULT hr;

IActiveViewPtr ipActiveView(m_ipMap);
IDisplayPtr pDisp(ipActiveView);

IGxDialogPtr ipGxDialog(CLSID_GxDialog);
IGxObjectFilterCollectionPtr pGxObjectFilterCollect(ipGxDialog);
IGxObjectFilterPtr ipGxObjectFilter(CLSID_GxFilterDatasets);
pGxObjectFilterCollect->AddFilter(ipGxObjectFilter,TRUE);
IGxObjectFilterPtr pGxObjectFileter(CLSID_GxFilterFiles);
pGxObjectFilterCollect->AddFilter(pGxObjectFileter,FALSE);
ipGxDialog->put_AllowMultiSelect(VARIANT_TRUE);
ipGxDialog->put_Title(CComBSTR("选择数据"));

IEnumGxObjectPtr ipEnumGxObject;
VARIANT_BOOL bResult;
hr = ipGxDialog->DoModalOpen(0,;ipEnumGxObject,;bResult);
if(FAILED(hr))
 return;

hr = ipEnumGxObject->Reset();
IFeatureLayerPtr ipFeatureLayer(CLSID_FeatureLayer);

IGxObjectPtr ipGxObject;
while(!ipEnumGxObject->Next(;ipGxObject))
{
 IGxDatasetPtr ipGxDataset(ipGxObject);
 if(ipGxDataset !=0)
 {
  IDatasetPtr ipDataset;
  hr = ipGxDataset->get_Dataset(;ipDataset);
  if(FAILED(hr))
   return;
 
  IFeatureClassPtr ipFeatureClass(ipDataset);
  hr = ipFeatureLayer->putref_FeatureClass(ipFeatureClass);
  if(FAILED(hr))
   return;
 
  hr = ipFeatureLayer->put_Visible(VARIANT_TRUE);
 
  if(FAILED(hr))
   return;
 
  ILayerPtr ipLayer(ipFeatureLayer);
  hr = m_ipMap->AddLayer(ipLayer);
  if(FAILED(hr))
   return;
 
 }
}

IEnvelopePtr ipEnv;
hr = ipActiveView->get_FullExtent(;ipEnv);
if(FAILED(hr))
 return;

hr = ipActiveView->put_Extent(ipEnv);
if(FAILED(hr))
 return;

hr = ipActiveView->Refresh();
if(FAILED(hr))
 return;

AfxMessageBox("Test One SUCCESS");
}

举报 回复(0) 喜欢(0)     评分
默认头像
路人甲
路人甲
  • 注册日期2006-08-05
  • 发帖数5
  • QQ
  • 铜币144枚
  • 威望0点
  • 贡献值0点
  • 银元0个
5楼#
发布于:2006-08-21 16:49

如果是arcgis9.0添加什么???

举报 回复(0) 喜欢(0)     评分
默认头像
路人甲
路人甲
  • 注册日期2004-09-20
  • 发帖数59
  • QQ
  • 铜币405枚
  • 威望0点
  • 贡献值0点
  • 银元0个
6楼#
发布于:2006-02-22 18:19

不错,顶先!

举报 回复(0) 喜欢(0)     评分
默认头像
路人甲
路人甲
  • 注册日期2005-12-23
  • 发帖数42
  • QQ
  • 铜币216枚
  • 威望0点
  • 贡献值0点
  • 银元0个
7楼#
发布于:2006-02-17 12:23

这些代码在ArcObject开发一书中好象看到过,是否是此书上参考过的?

举报 回复(0) 喜欢(0)     评分
默认头像
路人甲
路人甲
  • 注册日期2006-02-15
  • 发帖数39
  • QQ
  • 铜币207枚
  • 威望0点
  • 贡献值0点
  • 银元0个
8楼#
发布于:2006-02-17 00:00
最后编译,然后点击打开,确定要打开的shp文件,打开就行了;
举报 回复(0) 喜欢(0)     评分
默认头像
路人甲
路人甲
  • 注册日期2006-02-15
  • 发帖数39
  • QQ
  • 铜币207枚
  • 威望0点
  • 贡献值0点
  • 银元0个
9楼#
发布于:2006-02-16 23:59

IenvelopePtr ipEnv;
hr = ipActiveView->get_FullExtent(;ipEnv);
    if(FALIED(HR))
   return;

 hr = ipActiveView->put_Full_Extent(ipEnv);
 if(FALIED(HR))
   return;

 hr = ipActiveView->Refresh();
 if(FALIED(HR))
   return;

举报 回复(0) 喜欢(0)     评分
上一页
默认头像

返回顶部