- 1、本文档共3页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
制作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 Objectdouble dDistanceTot=0.0;n=pts.GetCount ();m_ctrlMapX.SetMapUnit(miUnitKilometer);for (i=1; in;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)