CGridCtrl某一列增加ToolTip飘窗效果
CGridCtrl是MFC时代一个强大的表格控件类,我们在使用中如果某一列里的内容过多,无法显示完全的时候,需要鼠标指向这个列可以Tooltip飘窗显示的时候,可以用到下面这个方法。
使用的类是 CToolTipCtrl ,使用CToolTipCtrl的时候会调用AddToolTip这个方法,但是这个方法是需要传递一个控件的指针,而CGridCtrl的表格只有一个控件指针,每个单元格不是控件,所以也没有窗口指针。所以正常的AddToolTip方法绑定调用是没有作用的。
看到好多网上的资料都是在ontooltiphit中增加处理方法,但是有个问题,这个函数是Const函数,开发的时候发现CGridCtrl中的函数无法在这个函数中使用,无奈只好退而求其次,使用了mousewheel消息来处理的。下面说一下具体方法和思路:
1.CToolTipCtrl 声明为CGridCtrl的成员变量,AddToolTip绑定GridCtrl的指针。
2.设置需要Tooltip飘窗提示的具体列。
3.在mousewheel中捕获的事件中判断当前鼠标是否在我们需要Tooltip提示的列上,是的话激活tooltip显示。不是不显示。在这里过滤的目的主要是为了在具体列上能显示飘窗。
参考代码如下:
void CGridCtrl::OnMouseMove(UINT nFlags, CPoint point) { CRect rect; GetClientRect(rect); CCellID cellIDTip=GetCellFromPt(point);//这里根据鼠标指针获取到单元格 if (m_iToolTipColumn>0 && cellIDTip.col==m_iToolTipColumn)//判断单元格是否设置了飘窗效果,并且当前列是飘窗列 { CString str=GetItemText(cellIDTip.row,cellIDTip.col); m_ToolTip.UpdateTipText(str,this); m_ToolTip.Activate(TRUE); }else m_ToolTip.Activate(FALSE); }