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

  • Bonita BPM 7 is here! And for you, an in-depth tour of its innovation. In this webinar, we'll guide you through the brand-new features of this release and demonstrate them live. You will: Discover how business application implementation and maintenance is now even easier, with decoupling of process logic, business data and user interface Learn how to create "living applications" for business processes which present business data in custom views We recommend that you watch the half-hour recording of our …

  • Moving from an on-premises environment to Office 365 does not remove the need to plan for disruptions or reduce the business risk requirements for protecting email services. If anything, some risks increase with a move to the cloud. Read how to ease the transition every business faces if considering or already migrating to cloud email. This white paper discusses: Setting expectations when migrating to Office 365 Understanding the implications of relying solely on Exchange Online security Necessary archiving …

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date