//定义Tip信息对象,因为tip信息的情况很多,就直接用成员变量
CToolTipCtrl m_ToolTipCtrl;
//定义一个tip信息显示控制的变量,因为addtool和delTool会一直发消息
int m_iToolNum = 0; // 要设初始值为0
//下面是Tip信息初始化代码
//允许tip信息的显示
EnableToolTips(TRUE);
//创建tip信息
m_ToolTipCtrl.Create(this, TTS_ALWAYSTIP);
//设置tip信息出来的时间和结束的时间
m_ToolTipCtrl.SetDelayTime(TTDT_INITIAL, 100);
m_ToolTipCtrl.SetDelayTime(TTDT_AUTOPOP, 100);
//下面的代码放到鼠标移动消息处理下面,其他地方自己把握
//在需要显示tip信息的区域下,添加
if (NULL != m_ToolTipCtrl.GetSafeHwnd())
{
if (0 == m_iToolNum )
{
m_iToolNum = 1;
m_ToolTipCtrl.Active(TRUE);
m_ToolTipCtrl.DelTool(this, 1);
//这两个的ID要保持一致,不然会出现注册的ID越来越多,
m_ToolTipCtrl.AddTool(this, 文本信息, 显示tip信息的区域, 1);
}
else
{
m_iToolNum ++;
m_ToolTipCtrl.Active(TRUE);
}
if (m_iToolNum > 5)
{
m_iToolNum = 0;
m_ToolTipCtrl.Active(TRUE);
}
}
//在其它不需要显示tip信息的区域下
m_ToolTipCtrl.Active(FALSE );
//在PreTranslateMessage或DefWindowProc (个人建议用后面的)函数下
if (NULL != m_ToolTipCtrl.GetSafeHwnd())
{
if (m_iToolNum > 0)
{
//参数为消息变量
m_ToolTipCtrl.RelayEvent(&MSG);
}
}
总结:利用AddTool 和DelTool使tip信息的注册值保持在一个,这样,不会因为滚动条位置的变化,鼠标位置不变也会出现tip信息的错误;
AddTool 和DelTool会一直抛消息,导致的结果会一直闪, 因此利用了m_iToolNum 这样的一个计数器,截断消息的一直触发。