阅读:1564回复:1
[求助]AO中关于IEnvelope的问题(VC++)
<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> |
|
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> |
|
|