响应WM_MOUSEHOVER无法显示窗口?响应WM_MOUSELEAVE可以隐藏窗口
先创建一个对话框CTestDlg,然后在CTestDlg上面显示CS_CHlLD的CShowDlg对话框。
当鼠标没有在CShowDlg上2秒就自动隐藏CShowDlg。当鼠标移到CShowDlg区域,显示该对话框。
就像很多视频播放器的控制工具条。
本人出来WM_MOUSELEAVE和WM_MOUSEHOVER,但是当鼠标移到CShowDlg外隐藏该对好框之后,鼠标再移回来就无法再显示。
难道无法获得该对话框区域??
我知道在父类CTestDlg中可以实现,但现在想在OnMouseHover中实现。高手帮帮。
void CShowDlg::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if (!m_bTrackLeave)
{
// 鼠标第一次移入窗口时, 请求一个WM_MOUSELEAVE 消息
TRACKMOUSEEVENT tme;
tme.cbSize = sizeof(tme);
tme.hwndTrack = m_hWnd;
tme.dwFlags = TME_LEAVE | TME_HOVER;
tme.dwHoverTime = 1;
m_bTrackLeave = _TrackMouseEvent(&tme);
}
CDialog::OnMouseMove(nFlags, point);
}
LPARAM CShowDlg::OnMouseLeave(WPARAM wp, LPARAM lp)
{
m_bTrackLeave = FALSE;
ShowWindow(SW_HIDE);
return 0;
}
LPARAM CShowDlg::OnMouseHover(WPARAM wp, LPARAM lp)
{
m_bTrackLeave = TRUE;
ShowWindow(SW_NORMAL);
UpdateWindow();
return 0;
}