![]() |
|
|
![]()
|
|
| Rapalex |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 732 Регистрация: 20.1.2006 Где: Украина -> Ник олаев Репутация: 6 Всего: 8 |
У меня есть вдид документа (наследник от CView), наделён возможностями скролига, на нём рисуются различные объекты (НЕ прямоугольные).
Нужно выдать Tool tip при наведении мышки на него, а в тул типе было (например) его название. Хотелось бы чтоб было также красиво ка у тулбаров. Порылся в хелпе нашол: тултипы для тулбаров (CToolBarCtrl) - не подходит CToolTipCtrl - когда полоьзовался, там всё привязывается к контролам, прямоугольника и текст задаётся при создании, тоже не подойдёт для окна (EnableToolTips, CancelToolTips, FilterToolTipMessage, and OnToolHitTest) - пытался запустить так и не получилось. Подскажите что делать, в каком направлении рыть. Это сообщение отредактировал(а) Rapalex - 17.8.2007, 14:27 -------------------- In vitium ducit culpae fuga. Желание избежать ошибки вовлекает в другую. (Horatius) |
|||
|
||||
| FREEDEV |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 238 Регистрация: 6.3.2007 Где: Украина->Одесс а Репутация: нет Всего: 3 |
попробуй
CToolTipCtrl --------------------
Microsoft Windows Visla © |
|||
|
||||
| Rapalex |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 732 Регистрация: 20.1.2006 Где: Украина -> Ник олаев Репутация: 6 Всего: 8 |
CToolBarCtrl - оппечатался я, хотел CToolTipCtrl написать.
FREEDEV, некатит. -------------------- In vitium ducit culpae fuga. Желание избежать ошибки вовлекает в другую. (Horatius) |
|||
|
||||
| FREEDEV |
|
||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 238 Регистрация: 6.3.2007 Где: Украина->Одесс а Репутация: нет Всего: 3 |
так а что именно не катит?
ты создаешь тултип
прописываешь его в карту сообщений
и функцию для обработки
Это с кодепроджекта, посмотри там есть примеры. Я дома поищу, где-то должны быть проекты с ТулТипом --------------------
Microsoft Windows Visla © |
||||||
|
|||||||
| Rapalex |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 732 Регистрация: 20.1.2006 Где: Украина -> Ник олаев Репутация: 6 Всего: 8 |
Сенкс, вечером попробую.
-------------------- In vitium ducit culpae fuga. Желание избежать ошибки вовлекает в другую. (Horatius) |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
В принципе, способов 2:
Первый: 1) В конструкторе вью пишешь EnableToolTips(); 2) Переопределяешь виртуальную функцию OnToolHitTest, в которой все и делаешь. Только надо помнить, что твои области - это не окно. В этом случае работает общий тултип MFC-оболочки: каждый раз предыдущий тул уничтожается, а новый (если есть) - добавляется. Второй способ (чуть сложнее, но и гибче): Внутри вью создаешь свой собственный тултип и менеджишь его как описано в MSDN, а также здесь Этот способ лучше тем, что ты имеешь свой отдельный тултип, который можешь сделать многострочным, цветным, ... -------------------- ... |
|||
|
||||
| Rapalex |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 732 Регистрация: 20.1.2006 Где: Украина -> Ник олаев Репутация: 6 Всего: 8 |
Earnest, так что у каж дого окна есть свой тулип, просто не отоброжается? (я про про первый способ)
-------------------- In vitium ducit culpae fuga. Желание избежать ошибки вовлекает в другую. (Horatius) |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Как раз наоборот: есть один тултип на всю MFC-программму. И у него один или 0 тулов в каждый момент. Посмотреть, как все работает, можно в файле tooltip.cpp (в сорсах MFC). Функция называется CWnd::FilterTooltipMessage (как-то так).
Но я бы тебе рекомендовала второй способ: он более управляемый, только немного разобраться нужно. А первый оставь для тултипов к кнопкам тулбаров и диалоговых панелей (т.е. когда тебе самому ничего делать не надо - только строки прописать). -------------------- ... |
|||
|
||||
| Rapalex |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 732 Регистрация: 20.1.2006 Где: Украина -> Ник олаев Репутация: 6 Всего: 8 |
Понял, этотже тултип над тулбарами выскакиает.
А второй способ это то что FREEDEV сказал, и подразумевает использование CToolTipCtrl? -------------------- In vitium ducit culpae fuga. Желание избежать ошибки вовлекает в другую. (Horatius) |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Да, конечно - я же тебе ссылку дала.
-------------------- ... |
|||
|
||||
| Rapalex |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 732 Регистрация: 20.1.2006 Где: Украина -> Ник олаев Репутация: 6 Всего: 8 |
Понял, спасибо, уже начал делать...
-------------------- In vitium ducit culpae fuga. Желание избежать ошибки вовлекает в другую. (Horatius) |
|||
|
||||
| Rapalex |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 732 Регистрация: 20.1.2006 Где: Украина -> Ник олаев Репутация: 6 Всего: 8 |
Эх....
Earnest, что в твоём примере что в коде FREEDEV все ссылались на сообщение TTN_NEEDTEXT. В хелпе написано:
Разница для меня: TTN_GETDISPINFO - нет возвращаемого значения. Мина, в которую вступил - когда я поменял текст сообщения сообщение поменялось у всех кнопок тулбара, когда стал проверять поподание мышки в клиентскую часть окна, всё прошло. С TTN_NEEDTEXT если мышка не в окне возварщал FALSE и все тулбары работали, в TTN_GETDISPINFO так нельзя. Остался только один вопрос: Как выключить подсказку если мышка не над нарисованым объектом? (правильно) -------------------- In vitium ducit culpae fuga. Желание избежать ошибки вовлекает в другую. (Horatius) |
|||
|
||||
| FREEDEV |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 238 Регистрация: 6.3.2007 Где: Украина->Одесс а Репутация: нет Всего: 3 |
так убирай подсказку вообще, по движению мышки Добавлено через 2 минуты и 33 секунды или ты в документе не можешь определить где у тебя есть объекты, где нет ? --------------------
Microsoft Windows Visla © |
|||
|
||||
| Earnest |
|
||||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
TTN_NEEDTEXT == TTN_GETDISPINFO.
Возвращаемое значение есть всегда. Просто подключай обработчик через ON_NOTIFY_EX:
Соответственно, сигнатура у него должна быть другая. Вот пример, выдранный из кода:
m_lastDataHit = m_pTool->GetDataTipInfo (ptPos, _strTip); Тут мы спрашиваем у некоего агента, как там с данными. m_lastDataHit - это int, мы его храним, чтобы на MouseMove правильно спрятать\показать тултип:
Тут еще нужно позаботиться о том, чтобы для различных участков экрана (объектов) возвращались разные int-значения. m_wndDataTip - это и есть CToolTipCtrl, который создаем на OnCreate и устанавливаем ему всякие параметры:
Ну, еще в PreTranslateMessage есть такой кусок:
Вот и вся обработка. -------------------- ... |
||||||||||
|
|||||||||||
| Rapalex |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 732 Регистрация: 20.1.2006 Где: Украина -> Ник олаев Репутация: 6 Всего: 8 |
Мда.
Это вообще одно и тоже. Добавлено через 3 минуты и 20 секунд Вроде сделал. Сенкс. -------------------- 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. |