阅读:1584回复:2
请教斑竹大人和各路高手:如何创建一个bmp格式的图元,并能够移动它?
<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> |
|
|
1楼#
发布于:2005-03-26 19:50
<P>斑竹,请帮帮忙啊!</P><P>谢谢!</P>
|
|
|
2楼#
发布于:2005-03-22 14:04
<P>我的邮箱是<a href="mailtnudtlarry@163.com" target="_blank" >nudtlarry@163.com</A>,你也可以把答案发给我,十分感谢!!!!</P>
|
|
|