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

  • Discover how to quickly remediate aggressive security threats. Read this report from Forrester Research and get the facts about new automated compliance processes and how they will reduce your organization's vulnerability and risk. Learn to: Adopt a set of cyber "Rules of Engagement" Define the appropriate response through the "Response Index" Create actionable response metrics Ensure multiple levels of audit and reinforcement Plus, find out how to better align security and operations teams and put the …

  • Live Webinar June 2, 2015 - 11 am PST / 2 pm EST Your organization and brand are increasingly digital today, proliferating across websites, media outlets, social networks, search engines, mobile apps, online marketplaces and more. Each digital touch point not only enhances the value of your brand, but also represents far greater risk for your company. They increase opportunities for brand defamation and data leakage; act as discreet places to conspire and collude; and open the door to new security …

Most Popular Programming Stories

More for Developers

RSS Feeds

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