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判断鼠标是否在窗口中