![]() |
|
|
![]()
|
|
| Rapalex |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 732 Регистрация: 20.1.2006 Где: Украина -> Ник олаев Репутация: 6 Всего: 8 |
Задача не нова. Есть у меня вид на нём нарисованы НЕ прямоугольные геометрические фигуры, типа пазла набросаны.
При наведении мышкой на них нужно подсветить например название той или иной фигуры, разумеется при поподании а фон они должны сразу пропасть. Конечно по координате мыши в окне могу быстро определить фигуру. Если честно воспользоваться методом через EnableToolTips() и OnToolHitTest() не получилось, что-то там не чисто. Но мне он не очень та и подходит, там один тултип на всё МФЦ приложение и он прямоугольный, а мне нужно отобразить его с типом "балун". Поэтому хотел воспользоваться CToolTipCtrl. Про LPSTR_TEXTCALLBACK знаю и обрабатывал TTN_NEEDTEXT, но из того обработчика не смогу сказать что тултипу не нужно появляться. Если что-то не внятно обьянил, то это от того что сам не знаю))) Люди подскажите как мне моё довести до ума, или расскажите как это правильно делается. Спаибо. -------------------- In vitium ducit culpae fuga. Желание избежать ошибки вовлекает в другую. (Horatius) |
|||
|
||||
| Earnest |
|
||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Очень хорошо тебя понимаю, т.к. всегда сама с этим длом путаюсь. Слава богу, у меня есть работающие примеры (хоть сама писала-разбиралась, но уже не помню), с которых можно драть.
Итак, выборка из работающего кода: 1) заводим в окне-виде переменную CToolTipCtrl m_wndDataTip 2) В обработчик OnCreate вида добавляем следующий код:
2) В PreTranslateMessage вставляем код
В принципе, можно обойтись без RelayEvent, если использовать флаг SUBCLASS, и я где-то в другом месте (для всяких In-Place tooltips так делала, но этот код написан именно так, поэтому умничать не буду. Захочешь - сам экспериментируй. 4) В обработчик OnMouseMove вида добавляем следующий код:
5) Добавляем обработчик для обработки CALLBACK-текста
Не помню уже, зачем здесь некоторый дубляж, но вроде иначе (без последнего обработчика) происходит путаница с MFC-тултипом, а без MouseMove - то ли не гаснет вовремя, то ли еще что-то. Возможно, если убрать CALLBACK из определения тула (т.е. не пользоваться стандартной AddTool), то можно обойтись без обработки TTN_NEEDTEXT. Но этот вариант, несмотря на некоторую избыточность, точно работает. -------------------- ... |
||||||||
|
|||||||||
| Rapalex |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 732 Регистрация: 20.1.2006 Где: Украина -> Ник олаев Репутация: 6 Всего: 8 |
++1 Помогло)))
Только я не показывал и прятал тултип а вызывал Activate(). Замечание: строки
Остался один баг, когда мышка выходит за приделы вида, возвращается и ждёт тултипа, то ттултип как бы дважды появляется, первый раз появился сразу пропал а потом появляется и висит как наужно. И что за SUBCLASS и In-Place tooltips? По подробней рассказать можешь? -------------------- In vitium ducit culpae fuga. Желание избежать ошибки вовлекает в другую. (Horatius) |
||||
|
|||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Хм, не замечала. Впрочем у нас там много чего наверчено, на мышку-то, может нивелируется... Другое твое замечание - ну, может быть... Этот код довольно давно живет и вроде особых проблем не вызывает, а желания его вылизывать нет (как в том анекдоте, про закат солнца на западе TTF_SUBCLASS это флаг, который можно присобачить TOOLINFO при добавлении тула. Тогда RelayEvent становиться не нужным, тултип контрол присабклассится к своему owner'у и сам следит за мышиными событиями. In-Place ToolTips - это тултипы, которые показываются обычно вместо слишком длинных (обрезанных) строк, скажем, в три или лист-контролах при наведении мыши на не влезшую строку. Например, можно написать свой ComboBox (или Edit), где будет всплывать тултип на месте текстового окошка. Там вся фишка в том, чтобы визуально совместить текст тултипа с исходной строкой, чтобы это выглядело как разворачивание строки... -------------------- ... |
|||
|
||||
| Rapalex |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 732 Регистрация: 20.1.2006 Где: Украина -> Ник олаев Репутация: 6 Всего: 8 |
Понял, спасибо.
-------------------- In vitium ducit culpae fuga. Желание избежать ошибки вовлекает в другую. (Horatius) |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |