但選了卻沒有反應,原因是必須加上 Track 追蹤滑鼠,
以下是在 MFC 上實作 Mouse Leave 和 Mouse Over 的簡單範例。
在 CDlg.h 宣告一個旗標
class CDlg : CDialog
{
BOOL m_bTrackingMouse;
};
在 MouseMove 時設上 Track,CDlg.cpp 中需要加上這些 code
void CDlg::CDlg()
{
m_bTrackingMouse = FALSE;
}
BOOL CDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
ifmessage == WM_MOUSEMOVE)
{
if(!m_bTrackingMouse)
{
TRACKMOUSEEVENT tme;
tme.cbSize = sizeof(tme);
tme.hwndTrack = GetSafeHwnd();
tme.dwFlags = TME_HOVER|TME_LEAVE;
tme.dwHoverTime = 1;
m_bTrackingMouse = TrackMouseEvent(&tme);
}
}
else if(message == WM_MOUSELEAVE)
{
m_bTrackingMouse = FALSE;
// 做些 Mouse Leave 做的事,例如顏色變暗
}
else if(message == WM_MOUSE_HOVER)
{
// 做些 Mouse Over 做的事,例如元件顏色變亮
}
}
這樣的寫法在當你的 Window 上有很多子元件時,
會發生滑鼠移到子元件上,主 Window 也收到 Leave 的狀況,
解法方法就是在 Mouse Move 時加上檢測滑鼠是不是在子元件上面再行處理,
比較需要注意的是上面範例是在 CDlg::WindowProc() 內,
若要加上對子元件 MouseMove 的處理,要在 PreTransMsg() 裡才接得到子元件的訊息。
妳好,請問我要如何才可以判斷滑鼠是否已經在元件上面呢?
回覆刪除