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

  • The 3rd Platform of computing, based around the four pillars of mobile computing, social media, big data and analytics, and cloud, is redefining what IT infrastructure needs to provide. Endpoint solutions must meet not only traditional data protection requirements, but also a new set of requirements driven by the explosion in mobile computing. This IDC white paper explores the customer challenges associated with safeguarding data residing on various endpoint devices, including laptops, tablets, and …

  • Are you truly leading your team or simply managing them? Organizations need leaders and your team needs someone to follow. With some ongoing development, you could become that leader. Learn the top leadership qualities that inspire others to want to follow you and the direction of your company.

Most Popular Programming Stories

More for Developers

RSS Feeds

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