В этой рассылке будет рассмотрен вопрос создания всплывающих подсказок (ToolTip)
средствами MFC, а также рассмотрены некоторые возможности по управлению
подсказками. В частности изменение цвета фона и текста подсказки, изменение
времени инициализации и продолжительности, ширину полосы окружающий текст,
ширину окна самой подсказки и т. д.
Создание всплывающей подсказки
В библиотеке MFC всплывающие подсказки создаются на основе класса CToolTipCtrl.
Для создания используется метод Create. Вот его описание:
Первый параметр pParentWnd, указатель на окно, которое содержит элемент. Этот
параметр не может быть пустым.
Второй параметр dwStyle, определяет стиль всплывающей подсказки. Этим
параметром может быть любая комбинация стандартных стилей окна. Кроме того есть
ещё два стиля определённых классом элемента, TTS_ALWAYSTIP и TTS_NOPREFIX. В
таблице приведено их описание.
Стиль
Значение
TTS_ALWAYSTIP
Определяет, что всплывающая подсказка будет появляться, когда курсор будет над
элементом, независимо от того является ли окно-владелец подсказки активным или
не активным. Без этого стиля подсказка появляется, когда окно-владелец активно,
и не появляется когда неактивно.
TTS_NOPREFIX
Этот стиль запрещает системе удалять символ амперсанд(&) из строки. Если
всплывающая подсказка не имеет стиля TTS_NOPREFIX, система автоматически
удаляет символ амперсанд, позволяя приложению использовать одинаковые строки,
как для элементов меню, так и для текста подсказки.
Для включения, выключения всплывающей подсказки есть функция Activate.
void Activate(
BOOL bActivate
);
Если значение bActivate - TRUE, элемент включается; если FALSE, выключается.
Когда ToolTip включен, информация ToolTip'а появляется, когда курсор находиться
над элементом, зарегистрированным за ToolTip'ом; когда он выключен - информация
ToolTip 'а не появляется когда курсор проходит над элементом.
Функция AddTool
Функция AddTool предназначена для регистрации элемента в ToolTip’е. В случае
успешного выполнения функция возвратит 1, а в случае неудачного 0. При вызове
вся указанная информация будет сохранена и при наведении курсора на
зарегистрированный элемент появится подсказка.
pWnd – указатель на окно которое содержит элемент.
nIDText – ID строкового ресурса который содержит текст.
nIDTool – ID элемента.
lpszText - Указатель на текст для элемента. Если этот параметр содержит
значение LPSTR_TEXTCALLBACK - TTN_NEEDTEXT сообщение передается окну владельцу,
на которое указывает pWnd.
lpRectTool - Указатель на структуру RECT, содержащую координаты прямоугольника
ограничивающего подсказку. Координаты - относительно верхнего левого угла
области самой подсказки.
Вот описание структуры RECT:
typedef struct _RECT {
LONG left;
LONG top;
LONG right;
LONG bottom;
} RECT, *PRECT;
left - Расстояние между левой границей и левым краем текста подсказки в
пикселях.
top - Расстояние между верхней границей и верхнем краем текста подсказки в
пикселях.
right - Расстояние между правой границей и правым краем текста подсказки в
пикселях.
bottom - Расстояние между нижней границей и нижнем краем текста подсказки в
пикселях.
Смена цвета фона и текста
Для смены цвета фона и текста всплывающей подсказки используются функции
SetTipTextColor и SetTipBkColor. Вот их описание:
У этих функции есть единственный параметр, который задаёт цвет. Для получения
цвета, который сейчас использован, применяются функции GetTipTextColor и
GetTipBkColor. Они возвращают цвет текста или фона подсказки.
Установка полей и размера
Для установки полей подсказки используют функцию SetMargin. Эта функция
реализует выполнение Win32 сообщения TTM_SETMARGIN.
void SetMargin(
LPRECT lprc
);
lprc - Адрес структуры RECT которая содержит информацию для установки полей.
Члены структуры RECT не определяют окружающий прямоугольник.
Для возвращения данных установок полей используют обратную функцию GetMargin.
Эта функция реализует выполнение Win32 сообщения TTM_GETMARGIN. Для задания
максимальной ширины окна подсказки используют функцию SetMaxTipWidth.
int SetMaxTipWidth(
int iWidth
);
Параметр iWidth задаёт новую максимальную ширину подсказки. При успешном
выполнении возвращает значение предыдущей ширины. Функция GetMaxTipWidth
возвращает текущее значение максимальной ширины.
Для установки новой окружающей рамки подсказки используется функция SetToolRect.
nDelay – Определяет новое время задержки в миллисекундах.
dwDuration – Флаг, определяющий, значение какой задержки нужно изменить.
iTime - Определяет время задержки в миллисекундах.
Параметр dwDuration указывает на флаг, определяющий, значение изменяемой
задержки. Значения этого параметра описаны в таблице.
TTDT_AUTOPOP
Возвращает продолжительность времени в течении которого окно
ToolTip'а остается видимым если курсор находится в окружающей рамке элемента.
TTDT_INITIAL
Возвращает продолжительность времени в течении которого курсор должен
оставаться в окружающей рамке элемента, для того чтобы появилось окно
ToolTip'а.
TTDT_RESHOW
Возвращает продолжительность времени необходимую для следующего появления окна
ToolTip'а когда курсор перемещается с одного элемента на другой.
Для получения текущей задержки подсказки используется функция GetDelayTime.
int GetDelayTime(
DWORD dwDuration
) const;
Параметр dwDuration указывает на флаг, определяющий значение текущей задержки.
Его значения были описаны выше в таблице. После выполнения функция возвратит
числовое значение задержки.
Вот небольшой исходник
к статье, который в общем показывает, как создавать всплывающие подсказки и
управлять ими.