第一步:使控件可以显示工具提示
调用EnableToolTips(TRUE)使一个窗口可以显示工具提示。在什么地方插入这条代码最好呢?在类的PreSubclassWindow()中。因为不管一个控件如何被创建,MFC都会调用此函数。而其他的函数则不一定会被调用。以OnCreate()为例,如果调用Create()或CreateEx()创建一个控件,OnCreate()会被调用,而如果一个控件是从对话框资源创建,OnCreate()就不会被调用。
实现代码如下:
void CTreeCtrlX::PreSubclassWindow()
{
CTreeCtrl::PreSubclassWindow();
EnableToolTips(TRUE);
}
第二步:重载虚函数OnToolHitTest()
MFC调用函数来确定在某个点是否应该显示工具提示。MSDN建议如果鼠标落在应该显示工具提示的点上,返回值1。这并不完全正确。这个函数应该返回不同的值来区分窗口中不同的应该显示提示的区域。
在这个函数中,本文只处理鼠标落在节点图标或节点状态图标上的情况。读者可以按照自己的情况向树的其他元素上添加工具提示。在两种情况下,都要计算图标的区域,并且把TOOLINFO的uID设为鼠标所在点的树节点的句柄。注意,尽管对于节点图标和节点状态图标,使用了相同的id,但返回值并不相同。不同的返回值迫使MFC更新工具提示。
虽然我们可以在此函数中给出工具提示,但因为鼠标的每次移动都会调用此函数,太多的处理并不是一个好注意,所以我们在其他的函数中处理应该显示什么提示的问题。
类声明中的代码如下所示:
// Overrides
// ClassWizard generated
virtual function overrides
//{{AFX_VIRTUAL(CTreeCtrlX)
protected:
…
virtual int OnToolHitTest
( CPoint point, TOOLINFO* pTI ) const;
/









