添加MAPX控件的事件响应。给动态生成的MAPX控件添加事件需要事件处理宏来处理消息映射。首先要在视图类的头文件H文件中声明宏DECLARE_EVENTSINK_ MAP(),可以将这个宏声明放在 DECLARE_MESSAGE_MAP()之后;然后在视图类的CPP文件中加入MapX事件处理函数映射宏
BEGIN_EVENTSINK_MAP(CExampleView, CView)
//CPP文件中消息映射
END_EVENTSINK_MAP()
其中BEGIN_EVENTSINK_MAP带有两个参数,第一个参数CExampleView当前类、第二个参数CView是当前类的基类。BEGIN_ EVENTSINK_MAP和END_EVENTSINK_MAP()是一对定义事件映射的宏,其间可以插入自定义的MapX控件消息映射。
举例说明:
ON_EVENT(CExampleView, IDC_MAP, MAPX_DISPID_TOOLUSED, OnToolUsed, VTS_I2 VTS_R8 VTS_R8 VTS_R8 VTS_R8 VTS_R8 VTS_BOOL VTS_BOOL VTS_PBOOL)
第一个参数是当前类,
第二个参数是ID
第三个参数是消息映射
第四个参数是映射函数名字
之后是映射函数的参数变量类型 VTS_I2中 I2 代表int型2个字节 ,VTS_R8 中 R8代表 real型,8个字节。
然后在视图类的CPP文件中手动加入函数:
void CExampleView::OnToolUsed(short ToolNum, double X1, double Y1, double X2, double Y2, double Distance, bool Shift, bool Ctrl, bool *EnableDefault)
{
CString str;
str.Format("Tool=%d,[%f,%f][%f,%f],dist=%f,%s %s\n",ToolNum,X1,Y1,X2,Y2,Distance,(Shift)?"Shift":"",(Ctrl)?"Ctrl":"");
TRACE(str);
}
最后在视图类的头文件H文件中声明
void CExampleView::OnToolUsed(short ToolNum, double X1, double Y1, double X2, double Y2, double Distance, bool Shift, bool Ctrl, bool *EnableDefault);
注意:如果没有这步声明会出现error:
error C2065: 'OnMapViewChangedMap' : undeclared identifier