VC对话框+MapX 增加图层,画点 疑难

功能是:当在 两个 编辑框 中分别输入经纬度坐标后,点击按钮能在对话框的地图上显示一个点,当在输入一个经纬度坐标后显示两点连成的一条线,以此类推。。。。最后显示出点的轨迹!

//控件鼠标落下事件中处理的 下面的代码可以放到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(); } }

你可能感兴趣的:(VC对话框+MapX 增加图层,画点 疑难)