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()
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)