ToolTip control срабатывает только 1 раз

Общие вопросы, не зависящие от языка реализации.

Модераторы: Duncon, Eugie, Romeo, Hawk

Sera
Сообщения: 38
Зарегистрирован: 03 мар 2005, 17:23
Откуда: Симферополь

31 авг 2005, 20:15

Обнаружилась странная вещь, никак не могу разобраться, в чем же дело.
Использую WinAPI ToolTip control.
Create, Addtool, Activate, устанавливаю текст. В обработке сообщений пересылаю RelayEvent.

Вобщем, подключаю ToolTip к моему окну.
Теперь делаю так: навожу мышь на контрол и фиксирую ее там на 10-15 секунд, пока не пропадет всплывший тултип. После этого тултип больше не появляется, сколько мышой не води, не крути, не подводи снова... :/ меня это ставит в тупик.

Такое же поведение обружилось на WTL::HyperLink tooltip-е.

Дело в том, что у меня в приложение уже есть один созданный тултип, который появляется для кнопки. Он работает нормально. А вот для этого кастом-окна -- ерунда выходит!

Может, есть идеи?
Спасибо большое.
Hawk
Сообщения: 215
Зарегистрирован: 17 фев 2004, 14:52
Откуда: СПб
Контактная информация:

01 сен 2005, 10:18

Пришли пример как ты его инициализируешь и переправляешь сообщения
Sera
Сообщения: 38
Зарегистрирован: 03 мар 2005, 17:23
Откуда: Симферополь

01 сен 2005, 12:02

Код: Выделить всё

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);
   //...
}

Sera
Сообщения: 38
Зарегистрирован: 03 мар 2005, 17:23
Откуда: Симферополь

01 сен 2005, 12:12

Если найдутся любопытствующие, то могу подкинуть пример:

в
http://www.codeproject.com/wtl/wtl4mfc5.asp
скачать download demo proejct (81 kb).
Запустить прогу и попробовать подержать курсор мыши над линкой "Visit codeproject". После того, как тултип исчезнет сам, он больше не появляется.

Там и сорцы есть.
Eugie
Сообщения: 707
Зарегистрирован: 17 фев 2004, 23:59
Откуда: SPb

03 сен 2005, 14:00

Sera, фильтруй пересылаемые сообщения в PreTranslateMessage:

Код: Выделить всё

...
if(pMsg->message== WM_LBUTTONDOWN ||
   pMsg->message== WM_LBUTTONUP ||
   pMsg->message== WM_MOUSEMOVE)
m_tip.RelayEvent(pMsg);
...
Sera
Сообщения: 38
Зарегистрирован: 03 мар 2005, 17:23
Откуда: Симферополь

05 сен 2005, 18:09

Euqie, фильтровать сообщения, конечно, хорошо и правильно, но это совсем не решает мою задачу, да и не относится к ней.

Народ! Неужели никто не встречался с такой проблемой?
Помогите, пожалуйста
Eugie
Сообщения: 707
Зарегистрирован: 17 фев 2004, 23:59
Откуда: SPb

06 сен 2005, 14:38

Sera, ты же просила поделиться идеями :) Фильтровать сообщения все-таки не просто правильно, но и необходимо: представь, если будет перенаправлен мессадж, который в другом контроле делает что-то полезное, а tooltip просто убивает :(

По сабжу: попробуй вставить m_tip.Activate(TRUE) перед RelayEvent. Если не поможет, посмотри, доходят ли оповещения TTN_SHOW и TTN_POP до твоего окна (через WM_NOTIFY).
Sera
Сообщения: 38
Зарегистрирован: 03 мар 2005, 17:23
Откуда: Симферополь

08 сен 2005, 11:52

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);
}
Eugie
Сообщения: 707
Зарегистрирован: 17 фев 2004, 23:59
Откуда: SPb

08 сен 2005, 13:44

Ты пробовала вставлять вызов m_tip.Activate(TRUE) в PretranslateMessage? Есть подозрение, что tooltip рабочий, но по какой-то причине деактивируется после первого появления над твоим окном.
Sera
Сообщения: 38
Зарегистрирован: 03 мар 2005, 17:23
Откуда: Симферополь

08 сен 2005, 16:41

Нет, не помогает.
Горе мне, горе :) )) Короче, это микрософтовский глюк...
Ответить