Самостоятельное размещение tooltip в CToolbar

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Аватара пользователя
MDCI
Сообщения: 47
Зарегистрирован: 28 фев 2006, 15:25
Откуда: Симферополь
Контактная информация:

21 июн 2007, 13:04

Можно ли назначить в CToolBar в процессе выполнения тултип (подсказку), загружаемую с файла и т.п. (в программе используется языковый модуль). Слышал что это можно сделать с пом. CToolTipCtrl. Но вроде кнопка CToolbar отдельным классом CWnd не обладает... Или едиственный способ действовать наугад - "вылавливать" местоположение кнопки ? Подскажите...
Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

21 июн 2007, 14:18

ну можно вычислить на какой кнопке курсор мыши. ведь у тулбара есть размеры окна и у енго можно получить размеры кнопок. и в зависимости от того, над какой кнопкой курсор - такую подсказку и выдавать.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
MDCI
Сообщения: 47
Зарегистрирован: 28 фев 2006, 15:25
Откуда: Симферополь
Контактная информация:

21 июн 2007, 17:00

понятно, видимо придется "извращаться"... :)
BBB
Сообщения: 1272
Зарегистрирован: 27 дек 2005, 13:37

21 июн 2007, 17:51

MDCI,
ведь ToolTip-ы поддерживают возможность динамического запроса иекста подсказки. Если прои добавлении к ToolTip-у Tool-а в качестве строки подсказки указать LPSTR_TEXTCALLBACK.
По-моему, можно порыть в этом направлении. Т.е. идея такова. Вызвать AddTool для каждого элемента Тулбара, указывая lpszText как LPSTR_TEXTCALLBACK и nIDTool - уникальный для каждого элемента Тулбара. Тогда в функции окна, которая будет получать уведомления-запросы "Дай текст подсказки" по этому самому ID можно определить, какой именно элемент "просит" подсказку и выдать в твет соответсвующую строку.

Если коротко, то вот как-то примерно таким образом.
Аватара пользователя
MDCI
Сообщения: 47
Зарегистрирован: 28 фев 2006, 15:25
Откуда: Симферополь
Контактная информация:

26 июн 2007, 14:31

Решил проблему :)

для каждой кнопки вызывается SetBarTip:
typedef TCHAR* TSTR;

CToolTipCtrl tool;
CToolBar m_wndToolBar;
...
...
void <MainClassDlg>::SetBarTip(int Index, TSTR Text, UINT id)
{
CRect rect;
m_wndToolBar.GetClientRect(&rect);
//int _h=rect.Height();
//rect.left+=Index*_h;
//rect.right=rect.left+_h;
tool.AddTool(&m_wndToolBar, Text, &rect, id);
}

затем (после всех назначений):

tool.Activate(TRUE);
m_wndToolBar.GetToolBarCtrl().SetToolTips(&tool);

Хотя Index можно было бы убрать.

P.S. Мож кому понадобится.
Ответить