RE: Tooltips work in vs6, but not VS2005
Hello Woody,
I am not sure if this will be helpful or not.
I use ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF,
OnGetToolTipTextForFinalizeButton) and ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0,
0xFFFF, OnGetToolTipTextForFinalizeButton)
For the ToolTips Needt Text messages.
I know aI spent a fair bit of effort to get this to work.
"Woody" wrote:
I have moved a project from VS6 to VS2005. The app is an MFC dialog,
with tracking tooltips in a list control. When the app was built in
VS6, the tracking tooltips performed as expected, but when the app is
built in VS2005, no tooltips appear. I cannot figure out why this is
happening, and would appreciate some advice.
Here is the code, same in both VS6 and VS2005:
Creation of the tooltip, CToolTipCtrlEx:
// Set up the tooltip which will display variable values in the list
control
toolTipCtrl.Create(this,TTS_ALWAYSTIP);
toolTipCtrl.AddWindowTool(&pgmCtrl,LPSTR_TEXTCALLBACK); // tooltip
will not show until activated
toolTipDisplayed=false;
toolInfo.cbSize = sizeof (TOOLINFO); // set up the stuff needed for
message processing
toolInfo.hwnd = this->m_hWnd;
toolInfo.uId = (UINT) pgmCtrl.m_hWnd;
In PreTranslateMessage, the tooltip is activated and its position set
when we are within the list control:
if(pMsg->message==WM_MOUSEMOVE)
{
if(pMsg->hwnd==pgmCtrl.m_hWnd) // mouse move within list control
{
if(!toolTipDisplayed)
{
::SendMessage (toolTipCtrl.m_hWnd,TTM_TRACKACTIVATE,
(WPARAM)TRUE, (LPARAM) &toolInfo);
// Above message is sent in both VS6 and VS2005
}
::SendMessage(toolTipCtrl.m_hWnd,TTM_TRACKPOSITION,0,(LPARAM)
(DWORD) MAKELONG(pMsg->pt.x+15, pMsg->pt.y-15));
toolTipPos=pMsg->pt;
}
else // mouse move outside list control
{
if(toolTipDisplayed)
{
::SendMessage (toolTipCtrl.m_hWnd,TTM_TRACKACTIVATE,
(WPARAM)FALSE, (LPARAM) &toolInfo);
toolTipDisplayed=false;
}
}
}
return CDialog::PreTranslateMessage(pMsg);
Here is where we should come when the tooltip is to be displayed. In
VS2005, this is never reached; in VS6 it is.
BOOL CMasterDlg::OnNeedText( UINT id, NMHDR * pTTTStruct, LRESULT *
pResult )
{
....
}
In class CToolTipCtrlEx (adapted from Proise):
BOOL CToolTipCtrlEx::AddWindowTool (CWnd* pWnd, LPCTSTR pszText)
{
TOOLINFO ti;
ti.cbSize = sizeof (TOOLINFO);
ti.uFlags = TTF_IDISHWND | TTF_TRACK | TTF_ABSOLUTE;
ti.hwnd = pWnd->GetParent ()->GetSafeHwnd ();
ti.uId = (UINT) pWnd->GetSafeHwnd ();
ti.hinst = AfxGetInstanceHandle ();
ti.lpszText = (LPTSTR) pszText;
return (BOOL) SendMessage (TTM_ADDTOOL, 0, (LPARAM) &ti);
}
I noticed someone's post suggesting that there might be a mismatch
between commctrl.dll and WINVER, so I also tried using the older
TOOLINFO (v2) structure, but that didn't make any difference. On my
both systems, WINVER=501.
.