最近遇到界面显示信息被截断、显示不全的问题,所以使用tooltip来提示信息
使用MFC中封装好的CToolTipCtrl类
1、定义变量 CToolTipCtrl m_tooltip
2、在窗体的OnInitDialog()中创建m_Tooltip。
//创建m_tooltip
m_ToolTip.Create(this);//, TTS_BALLOON);
//将CToolTipCtrl与相应的控件对应起来
m_ToolTip.AddTool(this);
//设定文字的颜色
m_tooltipSetTipTextColor(RGB(0,0,255));
//设定提示文字在控件上停留的时间
m_tooltip.SetDelayTime(150);
//m_Tinfo为要传入的要显示的文字
m_ToolTip.GetToolInfo(m_Tinfo, this);
m_Tinfo.uFlags = TTF_TRACK;
m_ToolTip.SetToolInfo(&m_Tinfo);
3、加入ON_WM_MOUSEMOVE()
BEGIN_MESSAGE_MAP(CCToolDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_MOUSEMOVE() //加入鼠标移动消息响应函数
END_MESSAGE_MAP()
4、捕获主窗口的WM_MOUSEMOVE消息,在OnMouseMove(UINT nFlags, CPoint point)函数中增加如下代码:
void CxxxDlg::OnMouseMove( UINT nFlags, CPoint point )
{
BOOL bTipShow = FALSE;
if(!m_strLastShow.IsEmpty())
{
if(m_rcInfo.PtInRect(point))
{
if(m_bTipShow)
{
return;
}
ClientToScreen(&point);
m_ToolTip.UpdateTipText(m_strLastShow.GetBuffer(), this);
//由XY決定POINT位置
m_ToolTip.SendMessage(TTM_TRACKPOSITION, 0, (LPARAM)MAKELONG(point.x, point.y));
m_ToolTip.SendMessage(TTM_TRACKACTIVATE, TRUE, (LPARAM)&m_Tinfo);
bTipShow = TRUE;
m_bTipShow = TRUE;
}
}
if(bTipShow != m_bTipShow && m_bTipShow)
{
m_ToolTip.SendMessage(TTM_TRACKACTIVATE, FALSE, (LPARAM)&m_Tinfo);
m_bTipShow = FALSE;
}
}