如何做出mouse over效果以文找文

在很多語言中 都會提供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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值