nudtlarry
路人甲
路人甲
  • 注册日期2004-12-05
  • 发帖数319
  • QQ
  • 铜币770枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:1584回复:2

请教斑竹大人和各路高手:如何创建一个bmp格式的图元,并能够移动它?

楼主#
更多 发布于:2005-03-22 00:04
<P>我正在做一个项目,需要在地图上创建一个图形图元(初始位置从数据库中读出),这个图元能够按照数据库中的位置数据进行移动,并能显示其移动轨迹。</P>
<P>我尝试了很久都不成功,希望高手指点!</P>
<P>附:(我的代码)</P>
<P> CMapXFeatureFactory factory = m_ctrlMapX.GetFeatureFactory();
 CMapXLayer layer=m_ctrlMapX.GetLayers().Item("track");
 CMapXFeature newobj;
  CMapXPoint point;
 point.CreateDispatch(point.GetClsid());</P>
<P> CMapXStyle newstyle;
 newstyle.CreateDispatch(newstyle.GetClsid());
  newstyle.SetSymbolType(miSymbolTypeBitmap);
 newstyle.SetSymbolBitmapSize(24); </P>
<P>  newstyle.SetSymbolBitmapName("TEMP1-32.BMP");
 newstyle.SetSymbolBitmapTransparent(TRUE);</P>
<P> newobj.SetStyle(newstyle);</P>
<P> m_ctrlMapX.SetAutoRedraw(FALSE);
 layer.SetEditable(TRUE);</P>
<P>/****打开数据库,并读数据****/
 COleVariant var;  // 字段类型
 var.ChangeType(VT_BSTR, NULL);
 CString strID,strName,strX,strY,strFile; </P>
<P> double initX, initY;
 double X, Y;
 double deltaX, deltaY;</P>
<P> //获取路径
 char str[255];
 GetCurrentDirectory(255,str);
 strcat(str,"<a>\\track.mdb</A>");</P>
<P> // 打开已创建的trace数据库及trace表
 dbTrace.Open(str);
 Recordset.Open(AFX_DAO_USE_DEFAULT_TYPE,"SELECT * FROM track",NULL);</P>
<P> Recordset.MoveFirst();</P>
<P> Recordset.GetFieldValue("经度",var);
 strX=(LPCSTR)var.pbstrVal;
 initX=atof(strX);</P>
<P> Recordset.GetFieldValue("纬度",var);
 strY=(LPCSTR)var.pbstrVal;
 initY=atof(strY);</P>
<P>
 COleVariant vtPoint, vtStyle; </P>
<P> vtPoint.vt = VT_DISPATCH;
 vtPoint.pdispVal = point.m_lpDispatch;
 vtPoint.pdispVal->AddRef(); </P>
<P> vtStyle.vt = VT_DISPATCH;
 vtStyle.pdispVal = newstyle.m_lpDispatch;
 vtStyle.pdispVal->AddRef();</P>
<P> point.Set(initX,initY);</P>
<P> newobj = factory.CreateSymbol(vtPoint, vtStyle);</P>
<P> layer.AddFeature(newobj);
 m_ctrlMapX.SetAutoRedraw(TRUE);</P>
<P> layer.Refresh();
 layer.SetEditable(TRUE);</P>
<P> Recordset.MoveNext();</P>
<P> while(!Recordset.IsEOF()) // 有没有到表结尾
 {</P>
<P>  
  
  Recordset.GetFieldValue("经度",var);
  strX=(LPCSTR)var.pbstrVal;
  X=atof(strX);</P>
<P>  Recordset.GetFieldValue("纬度",var);
  strY=(LPCSTR)var.pbstrVal;
  Y=atof(strY);</P>
<P>  //point.Set(X,Y);
  deltaX=X-initX;
  deltaY=Y-initY;</P>
<P>  initX=X;
  initY=Y;
  newobj.Offset(deltaX, deltaY);
  //newobj.GetPoint().Set(X, Y);
  newobj.Update();</P>
<P>  Sleep(50);
  
  Recordset.MoveNext();
 }</P>
<P> //关闭记录集及库
 Recordset.Close();
 dbTrace.Close();</P>
<P>运行时报错:</P>
<P>不能对独立图元进行操作!</P>
喜欢0 评分0
---------------------------------------------- E-Mail: nudtlarry@163.com ----------------------------------------------
nudtlarry
路人甲
路人甲
  • 注册日期2004-12-05
  • 发帖数319
  • QQ
  • 铜币770枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2005-03-22 14:04
<P>我的邮箱是<a href="mailtnudtlarry@163.com" target="_blank" >nudtlarry@163.com</A>,你也可以把答案发给我,十分感谢!!!!</P>
---------------------------------------------- E-Mail: nudtlarry@163.com ----------------------------------------------
举报 回复(0) 喜欢(0)     评分
nudtlarry
路人甲
路人甲
  • 注册日期2004-12-05
  • 发帖数319
  • QQ
  • 铜币770枚
  • 威望0点
  • 贡献值0点
  • 银元0个
2楼#
发布于:2005-03-26 19:50
<P>斑竹,请帮帮忙啊!</P><P>谢谢!</P>
---------------------------------------------- E-Mail: nudtlarry@163.com ----------------------------------------------
举报 回复(0) 喜欢(0)     评分
游客

返回顶部