1、鼠标滑轮

   《1》

   if(pMsg->message == WM_MOUSEWHEEL)

   {

       if(this->GetFocus()->m_hWnd == m_ctrlMapX.m_hWnd)

       {

           if(GET_WHEEL_DELTA_WPARAM(pMsg->wParam) < 0)

               //向下滚

           else  

               //向上滚

       }

   }

   《2》

   zDelta<0表示向下滚,>0表示向上滚

   OnVScroll的实现主要是对滚动条当前位置的修正,以及对需要滚动的内容做平移处理

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

   {

       if(zDelta < 0)

       {

           OnVScroll(SB_LINEDOWN, GetScrollPos(SB_VERT), GetScrollBarCtrl(SB_VERT));

       }

       else if(zDelta > 0)

       {

           OnVScroll(SB_LINEUP, GetScrollPos(SB_VERT), GetScrollBarCtrl(SB_VERT));

       }

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

   }

   《3》

   RichEdit 控件要响应这些消息需要在OnInitDialog()内先调用SetEventMask()enable这些消息

   pRCtrl->SetEventMask(pRCtrl->GetEventMask()|ENM_SELCHANGE|ENM_SCROLL|ENM_UPDATE );

2、鼠标双击事件

   注册类的时候 加上CS_DBLCLKS属性

3、鼠标移出消息

   WM_MOUSELEAVE

   WM_MOUSELEAVE 是鼠标离开窗口时发出的消息,但是这个消息与普通的鼠标消息不同,要收到WM_MOUSELEAVE消息必须先调用TrackMouseEvent,

   并且每调用一次TrackMouseEvent 窗口只能收到一次WM_MOUSELEAVE,也就说如果要获得WM_MOUSELEAVE消息的话,当鼠标重新进入窗口时必须调用一次TrackMouseEvent。

   static BOOL bTrackLeave=FALSE;

   void CMyWnd::OnMouseMove(UINT nFlags, CPoint point)

   {

       if (!bTrackLeave)

       {

          // 鼠标第一次移入窗口时,请求一个WM_MOUSELEAVE 消息

           TRACKMOUSEEVENT tme;

           tme.cbSize = sizeof(tme);

           tme.hwndTrack = m_hWnd;

           tme.dwFlags = TME_LEAVE;

           _TrackMouseEvent(&tme);

           bTrackLeave = TRUE;

           // 在这里添加处理鼠标进入的代码:

           ………………………………

       }

   }

   手工添加消息映射和消息处理函数

   BEGIN_MESSAGE_MAP(CMyWnd, CWnd)

       //{{AFX_MSG_MAP(CMyWnd)

        ………………………

       //}}AFX_MSG_MAP

        ON_MESSAGE(WM_MOUSELEAVE,OnMouseLeave)

   END_MESSAGE_MAP()

   LPARAM CMyWnd::OnMouseLeave(WPARAM wp, LPARAM lp)

   {

       bTrackLeave = FALSE;

       // 在这里添加处理鼠标离开的代码:

       …………………………………..

       return 0;

   }

4、可以用PtInRect判断鼠标是否在窗口中