GMap.Net开发之自定义Marker使用方法(2)

public override void Dispose()
        {
            if (Pen != null)
            {
                Pen.Dispose();
                Pen = null;
            }

if (OutPen != null)
            {
                OutPen.Dispose();
                OutPen = null;
            }

base.Dispose();
        }
    }
}

介绍下GMapMarkerImage三个属性的作用:

Image:保存图标的图片。

Pen:在图片外围画DrawRectangle的Pen,当其不为null的时候,会在图片的外围画一个矩形,实现高亮(highlight)的效果。

OutPen:在图片外围画DrawEllipse的Pen,当其不为null的时候,会在图片外围画一个一个椭圆,设置这个值可以实现闪动。

3、移动图标(Move Marker)的实现:

在MapControl中添加如下事件的响应:

复制代码 代码如下:


mapControl.MouseDown += new MouseEventHandler(mapControl_MouseDown);
mapControl.MouseUp += new MouseEventHandler(mapControl_MouseUp);
mapControl.MouseMove += new MouseEventHandler(mapControl_MouseMove);

mapControl.OnMarkerClick += new MarkerClick(mapControl_OnMarkerClick);
mapControl.OnMarkerEnter += new MarkerEnter(mapControl_OnMarkerEnter);
mapControl.OnMarkerLeave += new MarkerLeave(mapControl_OnMarkerLeave);

MouseDown和MouseUp中判断左键是否按下(用左键来移动图标)。

OnMarkerEnter中设置选中的Marker,同时设置Pen的值,实现高亮。

OnMarkerLeave中取消选中的Marker,取消Pen的值,取消高亮。

MouseMove中更新选中选中Marker的Position就可以了。

4、图标闪动的实现:

需要一个定时器:使用的是Form下的Timer,定时器响应的事件:

复制代码 代码如下:


void blinkTimer_Tick(object sender, EventArgs e)
        {
            foreach (GMapMarker m in objects.Markers)
            {
                if (m is GMapMarkerImage)
                {
                    GMapMarkerImage marker = m as GMapMarkerImage;
                    if (marker.OutPen == null)
                        marker.OutPen = new Pen(Brushes.Red, 2);
                    else
                    {
                        marker.OutPen.Dispose();
                        marker.OutPen = null;
                    }
                }
            }
            mapControl.Refresh();
        }

更新所有Marker的OutPen的值(当然你也可以只更新某个Marker),通过在图标上画圈圈来实现闪动,当然你也可以通过设置Marker的IsVisible属性来实现自己想要的效果。。。

效果图如下:

GMap.Net开发之自定义Marker使用方法

全部代码如下:

复制代码 代码如下:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wjgyxd.html