hyb1011
路人甲
路人甲
  • 注册日期2004-07-22
  • 发帖数73
  • QQ
  • 铜币114枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:1413回复:0

大家帮我看看代码呢(VC+MO关于intersect)

楼主#
更多 发布于:2005-11-12 13:43
<P>要实现的功能是:根据经纬度动态打点(用的是Addevent),模拟汽车行驶,当右键点击所打的点时出现车的信息.右键点击查找的代码如下,本意是查询右键点击的点周围的一定区域是否包括所打的点mapPt,如果包括,则弹出信息:<BR>  CMoPoint Pt(m_map.ToMapPoint((float)X,(float)Y));<BR>   CMoRectangle select_Rect;<BR>   if(!select_Rect.CreateDispatch("MapObjects2.Rectangle")) return;<BR>   <BR>       double x=Pt.GetX();<BR>       double y=Pt.GetY();<BR>    <BR>       CMoRectangle rect_Extent(m_map.GetExtent());<BR>       double X_Scale;<BR>       double Y_Scale;<BR>   X_Scale=rect_Extent.GetHeight()/m_map.GetFullExtent().GetHeight();<BR>   Y_Scale=rect_Extent.GetWidth()/m_map.GetFullExtent().GetWidth();<BR>       double m_Scale=X_Scale;<BR>       if(X_Scale>Y_Scale)<BR>    m_Scale=Y_Scale;<BR>     select_Rect.SetBottom(y+50*m_Scale);<BR>     select_Rect.SetTop(y-50*m_Scale);<BR>     select_Rect.SetLeft(x-50*m_Scale);<BR>     select_Rect.SetRight(x+50*m_Scale);<BR>  <BR>  CMoRecordset m_SelectedRecSet;<BR>  CMoMapLayer selectedMapLayer;<BR>      <BR>  selectedMapLayer=m_map.GetLayers().Item(COleVariant(short(0)));<BR>  m_SelectedRecSet=selectedMapLayer.SearchShape(select_Rect,moContaining,"");<BR>   CMoFields fields(m_SelectedRecSet.GetFields());<BR>   CMoField field(fields.Item(COleVariant(TEXT("SHAPE")))); </P>
<P>     VARIANT va;<BR>     VariantInit(;va);<BR>     va.vt = VT_I4;   <BR>   <BR>     va.vt = VT_DISPATCH;<BR>     va.pdispVal = select_Rect.m_lpDispatch;<BR>    <BR>    if(! mapPt.Intersect(field.GetValue().pdispVal,va)) <BR>      MessageBox("can't find");<BR>    else<BR>      MessageBox("find");<BR>运行后,点击无响应,请高手指点一下(debug查询发现程序进intersect后跳不出来).<BR></P>
喜欢0 评分0
QQ:22621544 欢迎交流~^^~
游客

返回顶部