由于MAPX是以组建的形式提供给我们,要在上面画点,就必须相应鼠标事件:
添加宏
ON_EVENT(CMapView, IDC_MAP, DISPID_MOUSEDOWN /* MouseDown */, OnMouseDownMap, VTS_I2 VTS_I2 VTS_R4 VTS_R4)
以及实现事件的处理函数
void CMapView::OnMouseDownMap(short Button, short Shift, float screenX, float screenY)
{
double mapX,mapY ;
CMapXPoints pts ;
CMapXPoint pt ;
CMapXLayer layer ;
pts.CreateDispatch( pts.GetClsid() ); //创建对象
pt.CreateDispatch( pt.GetClsid() ); //创建对象
screenX = X;
screenY = Y;
m_pMap->ConvertCoord(&screenX,&screenY,&mapX,&mapY,miScreenToMap); //屏幕坐标装换为地图坐标
pt.Set( mapX , mapY ) ;
pts.Add(pt); //将点加入点集合
//查找图层是否存在
if ( !m_pMap->LayerExist("tmpLayer") ) {
layer = m_pMap->GetLayers().CreateLayer("tmpLayer");
}
else{
layer = m_pMap->GetLayers().Item("tmpLayer");
}
//获取图元工程对象,用于创建图元
CMapXFeatureFactory ff = m_pMap->GetFeatureFactory();
COleVariant vtPoints;
vtPoints.vt = VT_DISPATCH;
vtPoints.pdispVal = pts.m_lpDispatch;
vtPoints.pdispVal->AddRef();
//创建多点图元,并加到指定的图层中
CMapXFeature fe = ff.CreateMultipoint( vtPoints );
layer.AddFeature( fe ) ;
}
这样就实现了画点操作