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

Ответить

Код подтверждения
Введите код в точности так, как вы его видите. Регистр символов не имеет значения.

BBCode ВКЛЮЧЁН
[img] ВКЛЮЧЁН
[url] ВКЛЮЧЁН
Смайлики ОТКЛЮЧЕНЫ

Обзор темы
   

Развернуть Обзор темы: ToolTip control срабатывает только 1 раз

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

_serg_ » 31 май 2007, 11:34

Kolinus » 08 сен 2005, 18:11

а подробнее можно ??
с чего уверенность что это глюк ??
где-то есть его описание ?

Sera » 08 сен 2005, 16:41

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

Eugie » 08 сен 2005, 13:44

Ты пробовала вставлять вызов m_tip.Activate(TRUE) в PretranslateMessage? Есть подозрение, что tooltip рабочий, но по какой-то причине деактивируется после первого появления над твоим окном.

Sera » 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 » 06 сен 2005, 14:38

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

По сабжу: попробуй вставить m_tip.Activate(TRUE) перед RelayEvent. Если не поможет, посмотри, доходят ли оповещения TTN_SHOW и TTN_POP до твоего окна (через WM_NOTIFY).

Sera » 05 сен 2005, 18:09

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

Народ! Неужели никто не встречался с такой проблемой?
Помогите, пожалуйста

Eugie » 03 сен 2005, 14:00

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

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

...
if(pMsg->message== WM_LBUTTONDOWN ||
   pMsg->message== WM_LBUTTONUP ||
   pMsg->message== WM_MOUSEMOVE)
m_tip.RelayEvent(pMsg);
...

Sera » 01 сен 2005, 12:12

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

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

Там и сорцы есть.

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


Вернуться к началу