前两天完成项目任务,需要给按钮添加一个Tooltip提示,要求是点击按钮时出现提示,鼠标离开按钮时提示消失,再次点击按钮提示才再次出现。易知,提示可以用MFC的CToolTipCtrl类实现,比较简单,而要求鼠标离开按钮时消失就需要动动脑筋了,首先想到的是重载按钮类,添加鼠标移出响应事件,即响应WM_MOUSELEAVE消息,添加响应函数后,发现当鼠标移出按钮时,并不会执行此函数,在网上找资料知道了解决方法,参考网址
http://topic.csdn.net/t/20041214/17/3644793.html
http://blog.163.com/around-wind/blog/static/27123075200772041220614/
解决方法为
要响应WM_MOUSELEAVE,就要先响应WM_MOUSEMOVE,在其响应函数中,编写如下代码
void CTipButton::OnMouseMove(UINT nFlags, CPoint point)
{
}
其中是要事先声明的成员变量,并要做如下初始化
CTipButton::CTipButton()
{
}
然后再在移出响应函数中编写自己想要的移出响应代码
void CTipButton::OnMouseLeave()
{
}
网上还有人提出如下方法
重载CDialog::PreTranslateMsg,如下
未经测试,不知能否完成功能,按代码意思应该是可以的,但感觉不如第一种方法规范,不过这种方法用到的几个函数对以我们理解MFC的消息映射机制还是很有帮助的,也算收藏了。类似的代码也列举如下吧
LRESULT
{
int
int
CRect
GetClientRect(&rect);
CPoint
GetCursorPos(&curPt);
ScreenToClient(&curPt);
if(!rect.PtInRect(curPt))
{
m_Hover
}
else
{
m_Hover
}
m_bTracking
return
}