Tooltip for disabled controls (2)

As an alternative to the method suggested by Ran Almog, you can replicate MFCs fix in the dialog's PreTranslateMessage override.

The MFC code to look at is in the function RelayToolTipMessage in the file TOOLTIP.CPP.

This method has the advantage that it uses the tooltip itself to find the child window, the relevant CToolTipCtrl function is CToolTipCtrl::OnWindowFromPoint() - which has other fixes for special cases as well as the disabled control case.

Example: if using the DeveloperStudio Tooltip component, change the block it adds in PreTranslateMessage from:
	// CG: The following block was added by the ToolTips component.
	{
		// Let the ToolTip process this message.
		m_tooltip.RelayEvent(pMsg);
	}

to:

	// CG: The following block was added by the ToolTips component.
	{
		// transate the message based on TTM_WINDOWFROMPOINT
		MSG msg = *pMsg;
		msg.hwnd = (HWND)m_tooltip.SendMessage(TTM_WINDOWFROMPOINT, 0, (LPARAM)&msg.pt);
		CPoint pt = pMsg->pt;
		if (msg.message >= WM_MOUSEFIRST && msg.message <= WM_MOUSELAST)
			::ScreenToClient(msg.hwnd, &pt);
		msg.lParam = MAKELONG(pt.x, pt.y);

		// Let the ToolTip process this message.
		m_tooltip.RelayEvent(&msg);
	}

Last updated: 22 June 1998



Comments

  • tooltips in disabled buttons

    Posted by Legacy on 01/27/2004 12:00am

    Originally posted by: Jos� Miguel Gomes

    I'm using a custom class of flat buttons that inherits from CButton and I wanted those buttons to show tooltips when disabled. Where do I put the code you wrote?

    Reply
  • Fix: disabled buttons show tips but respond to clicks

    Posted by Legacy on 02/22/1999 12:00am

    Originally posted by: Mike Harnad

    In my case, Ray's code worked fine except for one small oversight.
    
    Disabled controls now show tooltips, but, in the case of CBitmapButtons,
    they now respond to button clicks even if disabled. I tweaked the
    code to the following to get tooltips AND prevent button clicks on
    disabled controls.

    BOOL YourClass::PreTranslateMessage( MSG* pMsg )
    {
    MSG msg = *pMsg;

    if ( msg.message == WM_MOUSEMOVE )
    {
    // translate the message based on TTM_WINDOWFROMPOINT.
    // this allows us to display tooltips for disabled controls.
    msg.hwnd = (HWND)m_tooltip.SendMessage(TTM_WINDOWFROMPOINT, 0, (LPARAM)&msg.pt);
    CPoint pt = pMsg->pt;
    ::ScreenToClient(msg.hwnd, &pt);
    msg.lParam = MAKELONG(pt.x, pt.y);

    m_tooltip.Activate(TRUE); // make sure tooltip is active
    m_tooltip.RelayEvent(&msg); // Let the ToolTip process this message.
    }

    return CDialog::PreTranslateMessage(&msg);

    }

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

Top White Papers and Webcasts

  • Live Event Date: December 11, 2014 @ 1:00 p.m. ET / 10:00 a.m. PT Market pressures to move more quickly and develop innovative applications are forcing organizations to rethink how they develop and release applications. The combination of public clouds and physical back-end infrastructures are a means to get applications out faster. However, these hybrid solutions complicate DevOps adoption, with application delivery pipelines that span across complex hybrid cloud and non-cloud environments. Check out this …

  • VMware vCloud® Government Service provided by Carpathia® is an enterprise-class hybrid cloud service that delivers the tried and tested VMware capabilities widely used by government organizations today, with the added security and compliance assurance of FedRAMP authorization. The hybrid cloud is becoming more and more prevalent – in fact, nearly three-fourths of large enterprises expect to have hybrid deployments by 2015, according to a recent Gartner analyst report. Learn about the benefits of …

Most Popular Programming Stories

More for Developers

RSS Feeds