在vc中使用MapX时,如何在视图类中响应鼠标消息

如果还是按照一般vc程序一样使用ON_WM_LBUTTONDOWN()宏是不会起作用的。程序永远执行到不了你的OnLButtonDown(UINT nFlags, CPoint point) 函数内。

方法是这样的:
主要是要用到MapX自己定义的一套消息相关宏
以下我们假设试图类的名字为:
CDemoView
这里我们要添加的是一个响应鼠标移动的消息处理函数

1、首先在DemoView.h文件的DECLARE_MESSAGE_MAP()下方添加  DECLARE_EVENTSINK_MAP()宏
2、在DemoView.cpp文件头部添加如下代码:
      #define IDR_MAP  100
3、在DemoView.cpp文件内添加如下代码:

1BEGIN_EVENTSINK_MAP(CDemoView,CView)
2    ON_EVENT(CDemoView,IDC_MAP,DISPID_MOUSEMOVE,OnMouseMoveInMap,VTS_I2 VTS_I2 VTS_XPOS_PIXELS VTS_YPOS_PIXELS)
3END_EVENTSINK_MAP()
4、然后在DemoView.H文件内添加如下代码:
BOOL OnMouseMoveInMap(short Button, short Shift, OLE_XPOS_PIXELS x, OLE_YPOS_PIXELS y);
5、在DemoView.CPP文件内添加如下代码:

BOOL CMapGeneratorView::OnMouseMoveInMap(
short Button, short Shift, OLE_XPOS_PIXELS x, OLE_YPOS_PIXELS y)
{
    
float screenX = (float)x;
    
float screenY = (float)y;
    
double mapX;
    
double mapY;
    
    m_ctrlMapX.ConvertCoord(
&screenX,&screenY,&mapX,&mapY,miScreenToMap);
        CString currentPos;
    currentPos.Format(
"经度:%f,纬度:%f",mapX,mapY);
    
return TRUE;
}

大概就这些,要添加鼠标单击等相关事件的响应函数的方法可以依次类推。
原文地址:https://www.cnblogs.com/strinkbug/p/682515.html