功能是:当在 两个 编辑框 中分别输入经纬度坐标后,点击按钮能在对话框的地图上显示一个点,当在输入一个经纬度坐标后显示两点连成的一条线,以此类推。。。。最后显示出点的轨迹!
//控件鼠标落下事件中处理的 下面的代码可以放到Timer里面
//或其他事件里面去执行 这里放在鼠标事件里面是为了方便点的收集(因为没有数据输入接口)
//头文件中定义:
CArray < double, double > XI; //用于手机经纬度坐标
CArray < double, double > YI;
void C***Dlg::OnMouseDownMap1(short Button, short Shift, float X, float Y)
{
double Xm,Ym;
m_ctrlMapX.ConvertCoord( &X, &Y, &Xm, &Ym, miScreenToMap); //坐标转换 屏幕坐标转成地图坐标
XI.Add( Xm );
YI.Add( Ym );
int Nm = XI.GetSize(); //取得坐标点动态数组长度
if( Nm > 1 )
{
//------------------------------------------------------------------------------
double Xb = XI[ Nm - 2 ];
double Yb = YI[ Nm - 2 ];
//------------------------------------------------------------------------------
CMapXPoints pts;
pts.CreateDispatch(pts.GetClsid());
pts.AddXY( Xb, Yb );
pts.AddXY( Xm, Ym );
//------------------------------------------------------------------------------
CMapXLayers allLr = m_ctrlMapX.GetLayers();
CMapXLayer staLr = allLr.GetAnimationLayer();
staLr.BeginAccess(miAccessReadWrite);
//------------------------------------------------------------------------------
CMapXFeature ft;
ft.CreateDispatch( ft.GetClsid( ) );
ft.Attach( m_ctrlMapX.GetDispatch( FALSE ) );
//创建图元的时候如果缺少这句就会出现:“独立的特征对象没有附属到地图。在其他特征方法或属性之前先使用 FeatureAttach()”的错误
ft.SetType( miFeatureTypeLine );
ft.GetStyle( ).SetLineColor( 0xFF0000 );
ft.GetStyle( ).SetLineStyle( 1 );
ft.GetStyle( ).SetLineWidth( 1 );
ft.GetParts( ).Add( pts );
staLr.AddFeature((LPDISPATCH)ft); //加入到目标图层
//------------------------------------------------------------------------------
// CMapXPoint ptd; //这块代码可以取消注释 把下面代码注释了 再看看效果 区别就是用不同类型的符号来表示点
// ptd.CreateDispatch( ptd.GetClsid( ) );
// ptd.Set( Xm, Ym );
//
// CMapXFeature ftd;
// ftd.CreateDispatch( ftd.GetClsid( ) );
// ftd.Attach( m_ctrlMapX.GetDispatch( FALSE ) );
//
// ftd.SetType( miFeatureTypeSymbol );
// ftd.GetStyle( ).SetSymbolType( 2 );
// ftd.GetStyle( ).SetSymbolBitmapSize( 4 );
// ftd.GetStyle( ).SetSymbolBitmapColor( 0x0000FF );
// ftd.SetPoint( ptd );
//
// staLr.AddFeature((LPDISPATCH)ftd);
//-----------------------------------------------------------------------------
CMapXPoint ptd;
ptd.CreateDispatch( ptd.GetClsid( ) );
ptd.Set( Xm, Ym );
CMapXFeature ftd;
ftd.CreateDispatch( ftd.GetClsid( ) );
ftd.Attach( m_ctrlMapX.GetDispatch( FALSE ) );
ftd.SetType( miFeatureTypeSymbol );
ftd.GetStyle( ).SetSymbolType( miSymbolTypeTrueTypeFont );
ftd.GetStyle().SetSymbolFontBackColor( 0x0000FF );
ftd.GetStyle().SetSymbolCharacter( 34 ); //改变数字可以改变符号样子 这里需要去查相关定义
CY sz; sz.Hi = 0; sz.int64 = 52500; sz.Lo = 52500; //这里文字大小设置也很奇怪
ftd.GetStyle().GetSymbolFont().SetSize( sz );
ftd.GetStyle().GetSymbolFont().SetName( "Mapinfo symbols" );
ftd.GetStyle().SetSymbolFontShadow( TRUE );
ftd.GetStyle().SetSymbolFontRotation( 0 );
ftd.GetStyle().SetSymbolFontHalo( FALSE );
ftd.GetStyle().SetSymbolFontColor( 0x0000FF );
ftd.SetPoint( ptd );
staLr.AddFeature((LPDISPATCH)ftd);
staLr.EndAccess();
}else{
//------------------------------------------------------------------------------
CMapXLayers allLr = m_ctrlMapX.GetLayers();
CMapXLayer staLr = allLr.GetAnimationLayer();
staLr.BeginAccess(miAccessReadWrite);
//------------------------------------------------------------------------------
// CMapXPoint ptd;
// ptd.CreateDispatch( ptd.GetClsid( ) );
// ptd.Set( Xm, Ym );
//
// CMapXFeature ftd;
// ftd.CreateDispatch( ftd.GetClsid( ) );
// ftd.Attach( m_ctrlMapX.GetDispatch( FALSE ) );
//
// ftd.SetType( miFeatureTypeSymbol );
// ftd.GetStyle( ).SetSymbolType( 2 );
// ftd.GetStyle( ).SetSymbolBitmapSize( 4 );
// ftd.GetStyle( ).SetSymbolBitmapColor( 0x0000FF );
// ftd.SetPoint( ptd );
//
// staLr.AddFeature((LPDISPATCH)ftd);
//-----------------------------------------------------------------------------
CMapXPoint ptd;
ptd.CreateDispatch( ptd.GetClsid( ) );
ptd.Set( Xm, Ym );
CMapXFeature ftd;
ftd.CreateDispatch( ftd.GetClsid( ) );
ftd.Attach( m_ctrlMapX.GetDispatch( FALSE ) );
ftd.SetType( miFeatureTypeSymbol );
ftd.GetStyle( ).SetSymbolType( miSymbolTypeTrueTypeFont );
ftd.GetStyle().SetSymbolFontBackColor( 0x0000FF );
ftd.GetStyle().SetSymbolCharacter( 34 ); //改变数字可以改变符号样子 这里需要去查相关定义
CY sz; sz.Hi = 0; sz.int64 = 52500; sz.Lo = 52500; //这里文字大小设置也很奇怪
ftd.GetStyle().GetSymbolFont().SetSize( sz );
ftd.GetStyle().GetSymbolFont().SetName( "Mapinfo symbols" );
ftd.GetStyle().SetSymbolFontShadow( TRUE );
ftd.GetStyle().SetSymbolFontRotation( 0 );
ftd.GetStyle().SetSymbolFontHalo( FALSE );
ftd.GetStyle().SetSymbolFontColor( 0x0000FF );
ftd.SetPoint( ptd );
staLr.AddF
eature((LPDISPATCH)ftd); staLr.EndAccess(); } }