制作MapX自定义工具--测距工具

     制作自定义工具是MapX编程中一个很重要的部分,其步骤比较简单,但很多人很容易忽略其中的部分步骤,使得此功能难以实现。具体可以按以下步骤来做,本人在做这一功能时花费时间颇多,因为大部分介绍这一功能的文章都忽略了其中第三步骤,使得初学者很难成功实现。

     故在原来基础上加以完善,使得步骤更加详细。其他自定义工具可以按照类似步骤来做。

//1.定义常量
#define MYTOOL_DISTANCE 100 //1~999

//2.创建工具
m_ctrlMap.CreateCustomTool(MYTOOL_DISTANCE,miToolTypePoly,miCrossCursor);

//3.创建事件槽
在View.h中,在DECLARE_MESSAGE_MAP()行下边加入一行代码:DECLARE_EVENTSINK_MAP()
在View.cpp中,加入
BEGIN_EVENTSINK_MAP(CPatrolCheckView, CView)
 ON_EVENT(CPatrolCheckView, IDC_MAP, 11/*MAPX_DISPID_POLYTOOLUSED*/, OnPolyToolUsedMap,

VTS_I2 VTS_I4  VTS_DISPATCH VTS_BOOL VTS_BOOL VTS_PBOOL)
 END_EVENTSINK_MAP()

 
//4.响应事件
在View.h中添加 void OnPolyToolUsedMap(short ToolNum, long Flags, LPDISPATCH Points,BOOL

bShift,BOOL bCtrl,BOOL FAR* EnableDefault);
在View.cpp中,加入实现代码
void CMapXSampleView::OnPolyToolUsedMap(short ToolNum, long Flags, LPDISPATCH Points,
BOOL bShift,BOOL bCtrl,BOOL FAR* EnableDefault)
{
//计算距离
if(Flags==miPolyToolInProgress) {//这句可有可无
if(ToolNum==MYTOOL_DISTANCE)
{
CMapXPoints pts;
long n;
long i;
try{
pts.AttachDispatch (Points, FALSE); // Get points Object
double dDistanceTot=0.0;
n=pts.GetCount ();
m_ctrlMapX.SetMapUnit(miUnitKilometer);
for (i=1; i<n;i++)
{
CMapXPoint pt1=pts.Item(i);
CMapXPoint pt2=pts.Item(i+1);
double d=m_ctrlMapX.Distance (pt1.GetX(),pt1.GetY(),pt2.GetX (),
pt2.GetY ());
dDistanceTot+=d; 
}
CString str;
str.Format ("总距离为:%f",dDistanceTot);
//在状态栏输出距离
((CMainFrame*)AfxGetMainWnd())->m_wndStatusBar.SetPaneText(0,str); //要先将m_wndStatusBar设

为public
}
catch (COleDispatchException *e){
e->ReportError ();
e->Delete ();
}
catch (COleException *e){
e->ReportError ();
e->Delete ();
}
}
}//if(Flags==miPolyToolInProgress)
}

//5.调用工具
void CMapXSampleView::OnMapToolDistancetool()
{
m_ctrlMapX.SetCurrentTool(MYTOOL_DISTANCE); //

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值