allove_gis
路人甲
路人甲
  • 注册日期2007-11-21
  • 发帖数2
  • QQ
  • 铜币125枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:1467回复:1

[求助]AO中关于IEnvelope的问题(VC++)

楼主#
更多 发布于:2008-07-27 14:48
<P>各位GIS朋友:</P>
<P>    大家好!有一个基于VC++ 环境下的AO开发中IEnvelope的问题向大家请教。</P>
<P>    程序中添加了MapControl 控件。以前进行空间查询的时候,先是从数据库中(ARCSDE+SQL)读入矢量要素文件,在视图区显示要素图层。然后声明MapControl的对象m_mapcontrol和IEnvelopePtr 类型的指针ipEnv,通过ipEnv = m_mapcontrol.TrackRectangle() 将拉框区域范围赋给ipEnv.</P>
<P>    现在我想在不打开要素图层的情况下,通过给ipEnv直接赋值,即不通过图层拉框选取操作获取ipEnv的范围。我将如何做呢?查了AO的帮助文档,有ipEnv.PutCoords(Xmin,Ymin,Xmax,Ymax)的方法说能够创建一个给定区域的envelope.但我尝试了一下,好像不可以。具体代码如下:</P>
<P> IEnvelopePtr ipEnv; </P>
<P> double RegionXmin = 576971.24;<BR>   double RegionXmax = 577660.33;<BR>   double RegionYmin = 2673823.1;<BR>   double RegionYmax = 2674590.9;<BR>   ipEnv->PutCoords(RegionXmin,RegionYmin,RegionXmax,RegionYmax);</P>
<P> 程序调试到最后一句时就会出错。</P>
<P> 请问这种方法行吗?要想实现我的意图,有没有其他更好的办法。</P>
<P> 谢谢各位!<BR></P>
喜欢0 评分0
gzstyxb
路人甲
路人甲
  • 注册日期2004-09-22
  • 发帖数358
  • QQ
  • 铜币1045枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2008-07-28 11:16
<P>要使用你定义的ipEnv接口,需要在你使用之前创建该接口的。从你给出的代码来看,你并没有创建该接口就直接使用了。你可以调试一下,会发现你定义的ipEnv是一个空指针的。正确的做法是:</P>
<P>IEnvelopePtr ipEnv(CLSID_Envelope);  或者是</P>
<P>IEnvelopePtr ipEnv; <BR>HRESULT hr = ipEnv.CreateInstance(CLSID_Envelope);  </P>
<P>然后就可以使用你定义的接口了。</P>
由爱故生忧, 由爱故生怖. 若离于爱者, 无忧亦无怖.
举报 回复(0) 喜欢(0)     评分
游客

返回顶部