Coding Change World

代码改变世界
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);
}

  

  

 

posted on 2019-10-11 17:43  alphaxz  阅读(590)  评论(0编辑  收藏  举报