處理滑鼠離開視窗的訊息 (WM_MOUSELEAVE) (轉)

worldblog發表於2007-12-09
處理滑鼠離開視窗的訊息 (WM_MOUSELEAVE) (轉)[@more@]

  處理滑鼠離開視窗的訊息 (WM_MOUSELEAVE)

 :namespace prefix = o ns = "urn:schemas--com::office" />

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;

}

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-990346/,如需轉載,請註明出處,否則將追究法律責任。

相關文章