Tooltip for the header


Adding a tooltip for the header control is quite straightforward. We use a tooltip control object and add a tool for the header control

Step 1: Add member of type CToolTipCtrl

Add a member variable of type CToolTipCtrl in your CListCtrl derived class.
CToolTipCtrl	m_tooltip;

Step 2: Initialize the tooltip object

Override PreSubclassWindow() in your CListCtrl derived class. After calling the base class PreSubclassWindow(), create the tooltip object. We override the PreSubclassWindow() instead of OnCreate() because the control is usually attached to the C++ object after it has already been created - usually from a dialog resource - and therefore OnCreate is never called for the object. It is important to note that the call to GetDlgItem(0) may fail if the control was created with a style other than LVS_REPORT.

If you are deriving from CListView then the code to create the tooltip and add a tool to it can be moved to OnCreate() or the OnInitialUpdate() function.

void CMyListCtrl::PreSubclassWindow() 
{
	CListCtrl::PreSubclassWindow();

	// Add initialization code
	m_tooltip.Create( this );
	m_tooltip.AddTool( GetDlgItem(0), "Right click for context menu" );
} 

Step 3: Call RelayEvents() function of the tooltip object

Override PreTranslateMessage() and call the RelayEvents() function of the CToolTipCtrl object.
BOOL CMyListCtrl::PreTranslateMessage(MSG* pMsg) 
{
	m_tooltip.RelayEvent( pMsg );	
	return CListCtrl::PreTranslateMessage(pMsg);
}



Comments

  • How to refresh tooltip position after using horizontal scroll bar?

    Posted by Legacy on 09/23/2001 12:00am

    Originally posted by: Gamli Zeevi


    I have used this code and it works nicely as long as I am not using the horizontal scroll bar. But after right or left scrolling the tooltip appears incorrectly in the previous position before the scrolling, i.e the tooltip positions are not refreshed after the horizontal scroll.

    Please your help

    Thank in advance

    Gamli

    Reply
  • Updated Code to Support Text for Each Individual Header

    Posted by Legacy on 05/16/2001 12:00am

    Originally posted by: Jimmy Riffe

    Here's a modification to allow individual text for each
    
    header column in the header control. A better solution
    would be to use string resources instead of hardcoded
    text for the call to UpdateTipText().

    BOOL CMyCustomView::PreTranslateMessage(MSG* pMsg)
    {

    UINT i;
    RECT rect;
    POINT newPoint;

    CString text[] =
    {
    "User", "Time Spent", "Action", "Charge",
    "Additional Allowances", "Security Code"
    };

    // Check for Each Rectangle

    for (i = 0; i < 6; ++i)
    {

    // fetch the location of the next header's
    // rectangle

    GetListCtrl().GetHeaderCtrl() ->
    GetItemRect(i, &rect);

    // fetch a copy of the mouse cursor location
    // (in screen coordinates)

    newPoint = pMsg -> pt;

    // convert the screen coordinates to client
    // coordinates

    ScreenToClient(&newPoint);

    // are we in a header rectangle ? If so,
    // we update the text and quit subsequent
    // checks

    if (::PtInRect(&rect, newPoint))
    {
    m_HeaderToolTip.UpdateTipText(text[i],
    GetListCtrl().GetHeaderCtrl());
    break;
    }

    }

    // relay the event to the tooltip control

    m_HeaderToolTip.RelayEvent(pMsg);

    // allow the base class handler to process

    return CListView::PreTranslateMessage(pMsg);

    }

    Reply
  • How to change the font of listctrl's headers

    Posted by Legacy on 01/10/1999 12:00am

    Originally posted by: ShaoJun

    Usually the font of listctrl's headers as same as menu's,I want to
    change the font of headers and items.But the font didn't change,
    recrangle changed.How can I do?

    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 …

  • Event Date: April 15, 2014 The ability to effectively set sales goals, assign quotas and territories, bring new people on board and quickly make adjustments to the sales force is often crucial to success--and to the field experience! But for sales operations leaders, managing the administrative processes, systems, data and various departments to get it all right can often be difficult, inefficient and manually intensive. Register for this webinar and learn how you can: Align sales goals, quotas and …

Most Popular Programming Stories

More for Developers

Latest Developer Headlines

RSS Feeds