15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Tooltips for static text.

Scott Andrew -- sandrew@pacbell.net
Wednesday, November 20, 1996

Environment: VC++ 4.2-flat, Win 95, WinNT 4.0

Has anyone had any luck with using tool tips on static text? I am wondering
if I need to create my own static class that handles tool tips properly.

I am in a strange position where the static text needs to have  localized
and english text for the tool tip. (ie. Bonjour/Hello). 

The standard tool tip handling doesn't seem to work. Any suggestions?



GoroKhM1 -- gorokhm1@SMTP.ATG-NET.COM
Friday, November 22, 1996

[Mini-digest: 3 responses]

Instead of static text, you may use edit control without border
with style Read-only.

-mg

MarkG@usa.net

-----From: Sven Plastwich 

Hi,
Let's assume a CDialog with Statics - You have to check "Notify Parent" in
the resource-ed (Example needed?)

Regardz
Sven


----------
From: 	Scott Andrew[SMTP:sandrew@pacbell.net]
Sent: 	Donnerstag, 21. November 1996 03:02
To: 	mfc-l@netcom.com
Subject: 	Tooltips for static text.

Environment: VC++ 4.2-flat, Win 95, WinNT 4.0

Has anyone had any luck with using tool tips on static text? I am wondering
if I need to create my own static class that handles tool tips properly.

I am in a strange position where the static text needs to have  localized
and english text for the tool tip. (ie. Bonjour/Hello). 

The standard tool tip handling doesn't seem to work. Any suggestions?



-----From: Dong Chen 

Try this:
I am putting my static control in a CDialogBar derived class: CTestDlgBar. I
believe this will work for a CDialog derived class too.

1) Set the style of the static control to SS_NOTIFY (Notify check box in the
style property page).

2) Setup the message map as:
BEGIN_MESSAGE_MAP(CTestDlgBar, CDialogBar)
	//{{AFX_MSG_MAP(CTestDlgBar)
                ......
	//}}AFX_MSG_MAP
	ON_NOTIFY_EX( TTN_NEEDTEXT, 0, OnToolTipNotify )
END_MESSAGE_MAP()

3) In the header file of CTestDlgBar class, add following lines:
int OnToolHitTest(CPoint point, TOOLINFO* pTI) const;
BOOL OnToolTipNotify( UINT id, NMHDR * pTTTStruct, LRESULT * pResult );

4)Write your OnToolHitTest function similar to:
int CTestDlgBar::OnToolHitTest(CPoint point, TOOLINFO* pTI) const
{
        // find child window which hits the point
        CWnd* pWndChild = ChildWindowFromPoint(point, CWP_ALL);
        if (pWndChild != NULL)
        {
	int nHit = ::GetDlgCtrlID(pWndChild->m_hWnd);
	if (pTI != NULL)
	{
                       pTI->hwnd = m_hWnd;
	       pTI->uId = (UINT)pWndChild->m_hWnd;
	       pTI->uFlags |= (TTF_IDISHWND | TTF_ALWAYSTIP);
	       pTI->lpszText = LPSTR_TEXTCALLBACK;
                        
                       int ret = ::SendMessage(pWndChild->m_hWnd,
WM_GETDLGCODE, 0, 0);
	       // this will screen out all the controls except static controls and
buttons
                       // you can customize it as you want
                       // another way to do this is to put a hit test
function here to check
                       // if the hit is on the bachground of the dialog bar
                       if ( !(ret & DLGC_BUTTON) && !(ret & DLGC_STATIC) )
return -1;
	}
	return nHit;
        }
        return -1;  // not found
}

5) Provide you tips
BOOL CTestDlgBar::OnToolTipNotify( UINT id, NMHDR * pNMHDR, LRESULT * pResult )
{
    TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR;
    UINT nID =pNMHDR->idFrom;
    nID = ::GetDlgCtrlID((HWND)nID);
    if( nID )
   {
        if (pTTT->uFlags & TTF_IDISHWND)
        {
	wsprintf(pTTT->lpszText, "Your tool tip text for ID: %d", nID);
	return TRUE;
        }
    }
    return FALSE;
}

This worked for me.
--
Dong
d_chen@ix.netcom.com





| Вернуться в корень Архива |