0
我的應用程序之一是從Windows XP移植到WIN7。對於此應用程序工具提示控件在XP中工作時無法在win7中工作。工具提示不是控件
代碼邏輯:
我們正處在一個常量字符串設定提示。
aToolTipText =anImageTypeStr;
並傳入一個函數,該函數調用ActivateToolTipText(int Id, bool activateFlag)
,它實際上是基於id處理Tooltip。
bool ActivateToolTipText(int Id, bool activateFlag)
{
CSA_TRY
{
// struct specifying info about tool in ToolTip control
TOOLINFO ti;
unsigned int uid = Id; // for ti initialization
LPTSTR lptstr = (LPTSTR)(LPCTSTR)m_strToolTipText[Id];
// CREATE A TOOLTIP WINDOW
if(activateFlag)
{
m_ToolTipHWND[Id] = CreateWindowEx(WS_EX_TOPMOST,
TOOLTIPS_CLASS,
NULL,
WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
m_hWnd,
NULL,
0,
NULL
);
}
// INITIALIZE MEMBERS OF THE TOOLINFO STRUCTURE
ti.cbSize = sizeof(TOOLINFO);
ti.uFlags = TTF_SUBCLASS ;
ti.hwnd = m_hWnd;
ti.hinst = 0;
ti.uId = uid;
ti.lpszText = lptstr;
// ToolTip control will cover the rect of Id
CRect rect_out;
GetIdArea(Id, &rect_out);
ti.rect = rect_out;
if(activateFlag)
::SendMessage(m_ToolTipHWND[Id], TTM_ADDTOOL, 0, (LPARAM) (LPTOOLINFO)&ti);
}
else
{
::SendMessage(m_ToolTipHWND[Id], TTM_DELTOOL, 0, (LPARAM) (LPTOOLINFO) &ti);
}
return TRUE;
}
}
你在調試器中運行你的代碼嗎?這可能會揭示問題。只需逐句通過聲明並查看是否所有的ID和指針都已正確初始化。問題很可能不在您所顯示的代碼中,而在您的程序的其他部分中可能與工具提示設施無關。 – nv3
我已經調試了代碼和工具提示字符串和ID ID設置正確的工具提示結構。 此外,我注意到使用spy ++後,鼠標移動TTM_RELAYEVENT不是由OLE調用bieng。爲什麼它不在Windows 7中,而相同的代碼正在爲XP工作。請提出解決此問題的任何解決方法或根本原因。 – sachin
我得到了解決方案: 更改ti.cbSize = sizeof(TOOLINFO); to ti.cbSize = sizeof(TOOLINFO) - 4; – sachin