Displaying Information in a CTreeView ToolTip

This article was contributed by John Czopowik.

Environment:

There is some confusion in the MFC world regarding CTreeView and tooltips. It seems as though the conservative approach of handling TTN_NEEDTEXTW and TTN_NEEDTEXTA notification messages does not work for some, known-only-to-Microsoft, reason. The following code requires comctl32.dll version 4.71 or later. Windows with IE ver 4.0 has this DLL updated already. A newer tree common control has an additional style: You can use the setting style of tree view: TVS_INFOTIP. In turn, the tree control will send notification message TVN_GETINFOTIP when the control is requesting text for tooltips. The handler receives a pointer to NMTVGETINFOTIP structure that has information about the tree item.

In this example, I set tootips to an item text. In the header file of the CTreeView derived class, declare a message handler:

afx_msg void OnTvnGetInfoTip NMHDR pNMHDR LRESULT pResult

And in cpp, use following macro:

BEGIN_MESSAGE_MAP (CTreeViewTestView, CTreeView)
    .
    .
    .
    ON_NOTIFY_REFLECT (TVN_GETINFOTIP, OnTvnGetInfoTip)
END_MESSAGE_MAP()

And define the handler:

void CTestTreeView::OnTvnGetInfoTip(NMHDR *pNMHDR, 
                                    LRESULT *pResult)

{
  LPNMTVGETINFOTIP pGetInfoTip = (LPNMTVGETINFOTIP)pNMHDR

  CString csItemTxt = 
     m_TreeCtrl.GetItemText(pGetInfoTip->hItem);

  strcpy(pGetInfoTip->pszText, csItemTxt);

  *pResult = 0;

}

Don't forget to add a ModifyStyle command in OnInitialUpdate:

GetTreeCtrl().ModifyStyle(0,
                          TVS_HASLINES |
                          TVS_LINESATROOT |
                          TVS_HASBUTTONS |
                          TVS_INFOTIP



About the Author

John Z. Czopowik VC++ MVP

Microsoft VC++ MVP

Comments

  • Using this Method with Visual C++ Version 5

    Posted by sweeneymini on 06/16/2005 07:12am

    I have the upto date MFC DLL AFAIK, so can I use the new functionality of this version (e.g. using TVN_GETINFOTIP) or am I restricted to using what MFC version it came with?

    Reply
  • Delay Time ?

    Posted by Legacy on 06/03/2003 12:00am

    Originally posted by: Yury

    This samble very good and simple. But i have unpleasant problem with delay time. 
    
    This code does not make any effect. WHY ???

    CToolTipCtrl* pTTCtrl = MyTree.GetToolTips();
    if(pTTCtrl != NULL)
    {
    pTTCtrl->SetDelayTime(TTDT_AUTOPOP, 2000);
    pTTCtrl->SetDelayTime(TTDT_INITIAL, 2000);
    pTTCtrl->SetDelayTime(TTDT_RESHOW, 2000);
    }

    The tooltipCtrl of tree use default value=500 anyway.

    • Delay Time ?

      Posted by yotamwimmer on 12/12/2010 05:41pm

      Were you able to solve this issue?

      Reply
    Reply
  • tree_view_newbie

    Posted by Legacy on 11/18/2002 12:00am

    Originally posted by: c_k


    Would need some easy Tutorial, to implement a Tree View.
    Your exampe might be good, but where to insert the code.
    (SDI ?, Doc/View ?????)

    Reply
  • Some corrections

    Posted by Legacy on 08/28/2002 12:00am

    Originally posted by: Giraud

    message handler:
    
    

    afx_msg void OnTvnGetInfoTip (NMHDR* pNMHDR, LRESULT* pResult);

    and some ";" in the source code

    don't forget to remove TVS_NOTOOLTIPS style
    when you add TVS_INFOTIP

    ModifyStyle(TVS_NOTOOLTIPS, TVS_INFOTIP);

    and it works correctly !

    Reply
Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Live Event Date: August 20, 2014 @ 1:00 p.m. ET / 10:00 a.m. PT When you look at natural user interfaces as a developer, it isn't just fun and games. There are some very serious, real-world usage models of how things can help make the world a better place – things like Intel® RealSense™ technology. Check out this upcoming eSeminar and join the panel of experts, both from inside and outside of Intel, as they discuss how natural user interfaces will likely be getting adopted in a wide variety …

  • Savvy enterprises are discovering that the cloud holds the power to transform IT processes and support business objectives. IT departments can use the cloud to redefine the continuum of development and operations—a process that is becoming known as DevOps. Download the Executive Brief DevOps: Why IT Operations Managers Should Care About the Cloud—prepared by Frost & Sullivan and sponsored by IBM—to learn how IBM SmartCloud Application services provide a robust platform that streamlines …

Most Popular Programming Stories

More for Developers

Latest Developer Headlines

RSS Feeds