如何利用C#+MapX编程实现添加符号图元并修改其样式等属性?

如何利用C#+MapX编程实现添加符号图元并修改其样式等属性?,第1张

这是vc的,我每句都加了注释,你可以参考下

CMapXFeature ft//创建图元对象

ft.CreateDispatch( ft.GetClsid( ) )

ft.Attach( m_ctrlMapX.GetDispatch( FALSE ) )//以上两句牵扯到组件知识,大概就是新建一个mapx对象就需要这样注册下

ft.SetType( miFeatureTypeLine )//图元样子,这里是线形的

ft.GetStyle( ).SetLineColor( 0xFF0000 )//颜色

ft.GetStyle( ).SetLineStyle( 1 )//线的形状

ft.GetStyle( ).SetLineWidth( 1 )//线宽

ft.GetParts( ).Add( pts )//既然是线性,需要至少两点来确定画线位置,这里的pts是CMapXPoints对象,在前面的程序里已经定义好了

看了你的代码,c#不是很懂,但是注意到像你设置了feature的style,但是style是要加到feature上的。vc里面会这样写

feature.SetStyle(style.m_lpDispatch)看看C#中feature对象的SetStyle方法

MapX 自带的工具有:

miAddLineTool: 新增线图元

miAddPointTool: 新增点图元

miAddPolylineTool: 新增折线图元

miAddRegionTool: 新增面图元

miArrowTool: 箭头,将鼠标形状设置为 default

miCenterTool: 将当前点居中地图

miLabelTool: 为鼠标下方图元添加标注

miPanTool: 在地图上漫游

miPolygonSelectTool: 通过多边形在地图上选择图元

miRadiusSelectTool: 通过椭圆在地图上选择图元

miRectSelectTool: 通过矩形在地图上选择图元

miSelectTool: 通过点击在地图上选择图元

miSymbolTool: 在地图上添加符号注释

miTextTool: 在地图上添加文字注释

miZoomInTool: 放大

miZoomOutTool: 缩小。

MapX 自带工具共 16 个,提供了大部分需要的功能,但是如果实现一些特殊的功能,仍然需要扩充 ( 牛聚粉等,2007) 。MapX 也预留了扩充的接口,如下:

Sub CreateCustomTool( ToolNumber As Integer,Type As ToolTypeConstants,Cursor,[Shift-Cursor],[CtrlCursor],[bInfoTips]) Member of MapXLib. Map。

实现直尺测量的功能 先定义扩展工具: Map1. CreateCustomTool CUSTOM_ TOOL_RULE,miToolTypeLine,miCrossCursor,然后再记录鼠标的移动距离,在地图的 map1 _MouseMove 事件中通过 Map1. Distance 方法将屏幕坐标转换为地理坐标即可。

实现热链接功能 在地图的 map1_ MouseMove 事件中,通过 Map1. Layers. Item( 1) .SearchWithinDistance 方法来不断地搜索,查看地物的属性库中是否链接了文件,如果查找到,则鼠标变形提示。

CMapXLayers layers=m_ctrlMapX.GetLayers()

CMapXFeature ftr

CMapXPoint pnt

COleVariant pntvt

if(!pnt.CreateDispatch(pnt.GetClsid()))

{

TRACE0("Failed to create CMapXPoint!")

return

}

try{

if(ftr.CreateDispatch(ftr.GetClsid()))

{

pnt.Set(m_ctrlMapX.GetCenterX(),m_ctrlMapX.GetCenterY())

pntvt.vt=VT_DISPATCH

pntvt.pdispVal=pnt.m_lpDispatch

pntvt.pdispVal->AddRef()

ftr=m_ctrlMapX.GetFeatureFactory().CreateText(pntvt,_T("中国人!"))

CMapXStyle style=ftr.GetStyle()

//设置Arial字体

style.GetTextFont().SetName("宋体")

//红色

style.SetTextFontColor(miColorRed)

//光晕

style.SetTextFontHalo(true)

//背景颜色

style.SetTextFontBackColor(miColorBlue)

//加重显示

style.GetTextFont().SetBold(true)

//斜体显示

style.GetTextFont().SetItalic(true)

//下划线

style.GetTextFont().SetUnderline(true)

CY a

//60000相当于18号字体

a.int64=120000

//改变大小

style.GetTextFont().SetSize(a)

ftr.SetStyle(style)

//显示

layers.Item("tmpLayer").AddFeature(ftr)

layers.Item("tmpLayer").Refresh()

}

else

{

AfxThrowOleException(CO_E_CLASS_CREATE_FAILED)

}

}

catch (COleDispatchException *e) {

e->ReportError()

e->Delete()

}

catch (COleException *e) {

e->ReportError()

e->Delete()

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11380418.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存