在很多語言中 都會提供mouse over 效果
例如當我們滑鼠移到一個按鈕上面 按鈕就會變亮 然後移走之後 又變回原樣
然而這功能在VC++中好像都看不到
那在VC++中應該要如何做出這功能呢
要做出這功能 當然就需要知道兩個時間點
就是滑鼠移入以及滑鼠移出的時候
滑鼠移入這非常容易只要在OnMouseMove()中偵測即可
不過MFC中並沒有OnMouseLeave() 那我們要怎樣知道滑鼠移出了呢
其實有兩個方法可以完成 一個是正規做法 另外一個是非正規的
先看非正規的吧
我們可以讓滑鼠只要一移動到這個元件上面的時候 就呼叫SetCapture()
這function的功能是讓這元件能接收到所有滑鼠的message 不管滑鼠移動到哪裡
之後在OnMouseMove()中 我們便可以判斷滑鼠的位置 有沒有在自己上面
如果判定超出的話 這就代表滑鼠離開了 我們便可將OnMouseLeave()的程式寫在這裡
記得要呼叫ReleaseCapture()這個function將滑鼠恢復正常
不然其他的元件會收不到滑鼠的message喔
另外一個方法是比較正規的做法 是使用_TrackMouseEvent()這function
當我們呼叫這個function並設定TME_LEAVE 之後滑鼠只要離開自己
他便會發出一個WM_MOUSELEAVE出來
WM_MOUSELEAVE 的接收方法 最簡單的就是在WindowProc()中接收
_TrackMouseEvent()使用範例如下
TRACKMOUSEEVENT tme; tme.cbSize = sizeof (TRACKMOUSEEVENT); tme.dwFlags = TME_LEAVE; tme.hwndTrack = this ->m_hWnd; _TrackMouseEvent(&tme); |
如此當滑鼠離開之後 我們便會收到一個WM_MOUSELEAVE
不過要注意 呼叫一次_TrackMouseEvent() 也只會發出一次WM_MOUSELEAVE