页面载入中....
如何在VC++6.0中使用MapWinGIS控件(之二) 
By  小鱼 发表于 2008-3-28 20:01:00 

    在上一篇文章中,对如何将MapWinGIS控件引入到VC++6.0环境中使用,做了个详细介绍。
    这一篇日志我将针对如何在VC++6.0环境中处理MapWinGIS的对象事件进行说明(该篇主要针对文档——视图结构的程序有用,因为涉及到控件的动态创建,如果是基于对话框的应用程序,那就不必这么麻烦,直接使用ClassWizard为控件添加事件即可)。
    上一篇文章里提到,事件的处理,需要创建一个事件槽(eventsink),这其实是一个宏,实现原理跟我们熟悉的消息映射宏(DECLARE_MESSAGE_MAP())一样,用法也基本相同。可以参照系统自动生成的消息映射宏进行添加。
    例如,我们要为Map控件的OnMouseUp()事件添加处理代码,需要做如下几步工作:
1、在View类的头文件中,加入事件槽的声明:
 DECLARE_EVENTSINK_MAP();
2、在View类的实现文件中,加入事件槽的实现:
 BEGIN_EVENTSINK_MAP(CTestMapWinGISView,CView)
 END_EVENTSINK_MAP()
3、在事件槽的实现部分(BEGIN...与END...之间)添加下面一行:
 ON_EVENT(CTestMapWinGISView,IDC_MAP,2,OnMouseUpMap,VTS_I2 VTS_I2 VTS_I4 VTS_I4)
(这个宏内部参数意义分别是:该事件属于哪个类;控件的ID;事件的ID;事件的处理函数指针;事件的参数队列,参数之间用空格格开)
4、在View类的头文件中,消息函数的声明部分,加入事件处理函数的声明:
 afx_msg void OnMouseUpMap(short _button,short _shift,long _x,long _y);
(该函数的参数与第3步中的参数队列相对应) 
5、在View类的实现文件中,加入事件处理函数的实现:
 void CTestMapWinGISView::OnMouseUpMap(short _button,short _shift,long _x,long _y)
 {
  AfxMessageBox("鼠标松开");
 }

    这几步的关键点在于:
A.如何知道事件的ID,即ON_EVENT()的第3个参数;
B.如何获得事件的参数,即ON_EVENT()的第5个参数;
    这里介绍一个比较好的方法:新建一个基于对话框的应用程序,在窗体上添加一个Map控件,用ClassWizard为控件添加需要的事件,然后查看向导生成的代码,直接拷贝过来就行了。

 
阅读全文 | 回复(0) | 引用通告 | 编辑
  • 标签:MapWinGIS VC 6.0 
  • 发表评论:
    页面载入中....

     
    站点公告
    页面载入中....
    站点日历
    页面载入中....
    最新日志
    页面载入中....
    最新评论
    页面载入中....
    最新留言
    页面载入中....
    友情链接
    站点统计
    页面载入中....
    日志搜索
    用户登陆
    页面载入中....



     
    Powered by Oblog.