ToolTip control срабатывает только 1 раз
Модераторы: Duncon, Hawk, Romeo, Eugie
Обнаружилась странная вещь, никак не могу разобраться, в чем же дело.
Использую WinAPI ToolTip control.
Create, Addtool, Activate, устанавливаю текст. В обработке сообщений пересылаю RelayEvent.
Вобщем, подключаю ToolTip к моему окну.
Теперь делаю так: навожу мышь на контрол и фиксирую ее там на 10-15 секунд, пока не пропадет всплывший тултип. После этого тултип больше не появляется, сколько мышой не води, не крути, не подводи снова... :/ меня это ставит в тупик.
Такое же поведение обружилось на WTL::HyperLink tooltip-е.
Дело в том, что у меня в приложение уже есть один созданный тултип, который появляется для кнопки. Он работает нормально. А вот для этого кастом-окна -- ерунда выходит!
Может, есть идеи?
Спасибо большое.
Использую WinAPI ToolTip control.
Create, Addtool, Activate, устанавливаю текст. В обработке сообщений пересылаю RelayEvent.
Вобщем, подключаю ToolTip к моему окну.
Теперь делаю так: навожу мышь на контрол и фиксирую ее там на 10-15 секунд, пока не пропадет всплывший тултип. После этого тултип больше не появляется, сколько мышой не води, не крути, не подводи снова... :/ меня это ставит в тупик.
Такое же поведение обружилось на WTL::HyperLink tooltip-е.
Дело в том, что у меня в приложение уже есть один созданный тултип, который появляется для кнопки. Он работает нормально. А вот для этого кастом-окна -- ерунда выходит!
Может, есть идеи?
Спасибо большое.
Пришли пример как ты его инициализируешь и переправляешь сообщения
Код: Выделить всё
class CMyClass : public MFC::CWnd
{
//...
CToolTipCtrl m_tip;
};
CMyClass::OnCreate
{
m_tip.Create(this);
m_tip.AddTool(this);
m_tip.Activate(TRUE);
m_tip.UpdateTipText( szToolTipText, this );
}
CMyClass::PreTranslateMessage
{
m_tip.RelayEvent(pMsg);
//...
}
Если найдутся любопытствующие, то могу подкинуть пример:
в
http://www.codeproject.com/wtl/wtl4mfc5.asp
скачать download demo proejct (81 kb).
Запустить прогу и попробовать подержать курсор мыши над линкой "Visit codeproject". После того, как тултип исчезнет сам, он больше не появляется.
Там и сорцы есть.
в
http://www.codeproject.com/wtl/wtl4mfc5.asp
скачать download demo proejct (81 kb).
Запустить прогу и попробовать подержать курсор мыши над линкой "Visit codeproject". После того, как тултип исчезнет сам, он больше не появляется.
Там и сорцы есть.
Sera, фильтруй пересылаемые сообщения в PreTranslateMessage:
Код: Выделить всё
...
if(pMsg->message== WM_LBUTTONDOWN ||
pMsg->message== WM_LBUTTONUP ||
pMsg->message== WM_MOUSEMOVE)
m_tip.RelayEvent(pMsg);
...
Euqie, фильтровать сообщения, конечно, хорошо и правильно, но это совсем не решает мою задачу, да и не относится к ней.
Народ! Неужели никто не встречался с такой проблемой?
Помогите, пожалуйста
Народ! Неужели никто не встречался с такой проблемой?
Помогите, пожалуйста
Sera, ты же просила поделиться идеями
Фильтровать сообщения все-таки не просто правильно, но и необходимо: представь, если будет перенаправлен мессадж, который в другом контроле делает что-то полезное, а tooltip просто убивает 
По сабжу: попробуй вставить m_tip.Activate(TRUE) перед RelayEvent. Если не поможет, посмотри, доходят ли оповещения TTN_SHOW и TTN_POP до твоего окна (через WM_NOTIFY).


По сабжу: попробуй вставить m_tip.Activate(TRUE) перед RelayEvent. Если не поможет, посмотри, доходят ли оповещения TTN_SHOW и TTN_POP до твоего окна (через WM_NOTIFY).
Eugie, Спасибо за помощь. Фильтровка сообщений для tooltip-а добавлена. Хотя tooltip RelayEvent не съедает сообщения. Использует он их или нет -- все равно сообщения передаются дальше. А вот лишние разы слать TTM_RELAYEVENT неэффективно.
По сабжу: В первый раз TTN_SHOW и TTN_POP доходят. А потом нет.
Я тут попробовала сделать простенькое mfc dialog-based приложеньице.
Добавляю
CToolTipCtrl m_tip;
PretranslateMessage { m_tip.RelayEvent + фильтр
}
OnInitDialog()
{
m_tip.Create(m_hWnd);
m_tip.AddTool(
//GetDlgItem(IDOK), //в этом случае все работает супер
m_hWnd, /*а так tooltip появляется и отрабатывает один раз. В следующий раз может появиться, если провести мышу над другим DlgItem-ом диалога. А если выводить за границу окна и возвращаться, то не появляется
*/
_T("Hi, Tooltip!!!"));
m_tip.Activate(TRUE);
}
По сабжу: В первый раз TTN_SHOW и TTN_POP доходят. А потом нет.
Я тут попробовала сделать простенькое mfc dialog-based приложеньице.
Добавляю
CToolTipCtrl m_tip;
PretranslateMessage { m_tip.RelayEvent + фильтр

OnInitDialog()
{
m_tip.Create(m_hWnd);
m_tip.AddTool(
//GetDlgItem(IDOK), //в этом случае все работает супер
m_hWnd, /*а так tooltip появляется и отрабатывает один раз. В следующий раз может появиться, если провести мышу над другим DlgItem-ом диалога. А если выводить за границу окна и возвращаться, то не появляется

_T("Hi, Tooltip!!!"));
m_tip.Activate(TRUE);
}
Ты пробовала вставлять вызов m_tip.Activate(TRUE) в PretranslateMessage? Есть подозрение, что tooltip рабочий, но по какой-то причине деактивируется после первого появления над твоим окном.
Нет, не помогает.
Горе мне, горе
)) Короче, это микрософтовский глюк...
Горе мне, горе
