VC++通过MapX调用MapInfo

 

第一步:用MFC应用程序向导新建一个单文档的工程,名字就不妨取为:mapxdemo
第二步:Project> Add To Project>Files,选择MapX.cpp和MapX.h,MapX安装文件中的例程中。同时还要手工将Mapx.h和Mapx.cpp这两个文件复制到你的工程目录中去,不然编译时会报错的
第三步:在mapxdemoView.h文件中包括它:
    #include "MapX.h"
  
  另外还要在视图类(mapxdemoView.h)中定义一个对象:
   
  class CMapxdemoView : pubic CView
  {
  ......
  CMapX m_ctrlMapX; //这是要添加的
  .....
  ......
  }
第四步::声明一个常量。View > Resource Symbols>New>name为IDC_MAP。

第五步:在类向导(ctrl+W)中为mapxdemoView创建WM_SIZE 和 WM_CREATE的处理消息:

void CMapxSampleView::OnCreate(UINT nType, int cx, int cy)
{
  m_ctrlMapX.Create(NULL, WS_VISIBLE, CRect(0,0,100,100), this,IDC_MAP);
}

void CMapxSampleView::OnSize(UINT nType, int cx, int cy)
{

 CView::OnSize(nType, cx, cy);
   

  m_ctrlMapX.MoveWindow(0,0,cx,cy,TRUE);
}

 第六步:在类向导中为CmapxdemoView创建WM_SETFOCUS的处理消息,以确保当窗口处于活动状态时得到焦点。

void CMapxSampleView::OnSetFocus(CWnd* pOldWnd)  

  {

  CView::OnSetFocus(pOldWnd);

  m_ctrlMapX.SetFocus();

然后编译运行。就可以看到USA的地图了!如果没有就再试试。如果想让程序运行时不显示任何地图数据,需要将gst清空,方法如下: 

int CMapxSampleView::OnCreate(LPCREATESTRUCT lpCreateStruct)  

{

  if (CView::OnCreate(lpCreateStruct) == -1)

   return -1;

 

  //创建mapx控件

  CRect rc(0,0,100,100);

  if( !m_ctrlMapX.Create(NULL, WS_VISIBLE, rc, this, IDC_MAP) )
  return -1;

 
  //清空 gst 地图

  m_ctrlMapX.SetGeoSet("");

   return 0;

}

当然如果想显示自己的地图的话,在m_ctrlMapX.SetGeoSet("");中写入路径就可以了。
如m_ctrlMapX.SetGeoSet("asia.gst"); 或m_ctrlMapX.SetGeoSet("maps\\asia.gst");
这说明maps文件夹是在工程目录下的.
在地图显示出来后,用户通常要以各种比例查看地图的全局、局部或细部,必须提供诸如放大、缩小和漫游等功能。采用MapX通用工具,可以非常方便地实现上述功能。设定MapX使用标准工具的方法很简单,只需设定地图对象的CurrentTool属性。下面的例子是用标准放大工具实现放大功能。

添加新菜单项资源,输入标题“工具”,在“工具”下添加子菜单,输入标题“放大”及ID 为ID_ZOOM_ IN。打开类向导,选择视图类CMapXSampleView,为菜单项ID_ZOOM_IN 添加COMMAND 消息映射函数OnZoomIn ( ),并编辑码如下。

  void CMapXSampleView::OnZoomIn()

  {

  m_ctrlMapX.SetCurrentTool(miZoomInTool);// miZoomInTool为放大工具常量

  }

编译运行程序,选择“工具|放大”,就会看到此时光标变为放大镜,单击鼠标就会实现放大功能。可用相同方法实现其他标准工具的功能。

 

实现鼠标滚轮缩放

在mapx中地图实现滚轮事件的放大缩小,如果单纯的按照MFC中那样添加鼠标滚轮响应,在刚初始化的时候是正确的,好使。但是如果使用了mapx定制的工具或者自定义的工具的时候,程序就不再响应鼠标滚轮消息。具体的原因并不清楚。我猜想是由于MFC把一些东西交给了mapx来处理。意思是在图片点击鼠标已经不归MFC定制的那些类管理,而是交给了MAPx中的消息响应机制了。

要实现鼠标滚轮缩放请往下看,

打开类向导,选择视图类CMapXSampleView,为WM_MOUSEWHEEL 添加COMMAND 消息映射函数OnMouseWheel ( ),并编辑码如下。

BOOL CExampleView::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)

{

       // TODO: Add your message handler code here and/or call default

       //miNoMousewheelSupport:不支持鼠标缩放

       //miMousewheelNoAutoScroll:缩放/仅限滚动

       //miFullMousewheelSupport:缩放,外加拖动

       m_ctrlMapX.SetMousewheelSupport(miMousewheelNoAutoScroll);

       return CView::OnMouseWheel(nFlags, zDelta, pt);

}

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值