Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/25: Рейтинг темы: голосов - 25, средняя оценка - 4.56
28 / 27 / 11
Регистрация: 04.03.2010
Сообщений: 199
1

Добавление всплывающих подсказок

07.07.2014, 18:49. Показов 5171. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Я написал небольшой класс, создающий всплывающие подсказки (tooltip'ы) для указанных регионов. Класс имеет методы CreateTooltip(), создающий новое окно с помощью CreateWindowEx(WS_EX_TOPMOST, TOOLTIPS_CLASS, ...). А его метод AddTool() привязывает новую подсказку к окну tooltip'а в соответствии с указанным регионом.
Принцип работы прост: если окно всплывающей подсказки создано (методом CreateTooltip), то я добавляю новую подсказку.
Теперь подробнее о сути проблемы: также я написал класс, создающий кнопку (в данном случае не использую CreateWindow), основанную на картинке. Этот класс моей кнопки также должен добавить подсказку на занимаемый собой регион. Вопрос - как это правильно сделать? Есть такой вариант: создать экземпляр класса TTooltip и вызвать его методы CreateTooltip() и AddTool(). Но при этом будет создано отдельное новое окно всплывающей подсказки (уже второе в целевом окне, т.к. при создании основного окна создаётся экземпляр класса TTooltip и, соответственно, создаётся первое окно для подсказок). Но как быть, если у меня на окне будет 10 кнопок? Выходит, что будет создано 10 отдельных окон всплывающих подсказок? Насколько это правильно?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.07.2014, 18:49
Ответы с готовыми решениями:

Формирование всплывающих подсказок
Всем доброго дня! Мне нужно вывести всплывающую подсказку над элементом. Нашел в Интернете, как...

Нет всплывающих подсказок
Делал калькулятор по этому видеоуроку: 5k3h37YKZJI&t=15m29s По времени 15:30 автор начинает...

всплывающих подсказок на картинке
Хочу сделать всплывающие подсказки на картинке размером 793 х 735, чисто используя средства css. На...

Реализацией всплывающих подсказок
Привязал к картинки всплывающие подсказки Tooltip. Только вот для 1 города "Минск" не выходит...

1
28 / 27 / 11
Регистрация: 04.03.2010
Сообщений: 199
03.09.2014, 09:25  [ТС] 2
Лучший ответ Сообщение было отмечено Igor-84 как решение

Решение

Подниму тему. Следующий код добавляет 2 всплывающие подсказки для двух указанных регионов:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
INITCOMMONCONTROLSEX icc;
    InitCommonControlsEx(&icc);
    icc.dwSize = sizeof(INITCOMMONCONTROLSEX);
    icc.dwICC = ICC_BAR_CLASSES;
     
    HWND src_hwnd = hwnd;
    HWND tooltip_hwnd = CreateWindowEx(WS_EX_TOPMOST, TOOLTIPS_CLASS, "TooltipIM", WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP,
                              CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
                              src_hwnd, NULL, (HINSTANCE)GetModuleHandle(NULL), NULL);
     
    SetWindowPos(tooltip_hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
    SendMessage(tooltip_hwnd, TTM_SETMAXTIPWIDTH, 0, 200);
    SendMessage(tooltip_hwnd, TTM_SETDELAYTIME, TTDT_AUTOPOP, 15000);
     
    TOOLINFO ti = {0};
    ti.cbSize = sizeof(TOOLINFO);
    ti.uFlags = TTF_SUBCLASS;
    ti.hwnd = src_hwnd;
    ti.hinst = (HINSTANCE)GetModuleHandle(NULL);
    ti.uId = 1;
    ti.lpszText = "first";
    RECT frst = {20, 20, 70, 50};
    ti.rect.left = frst.left;
    ti.rect.top = frst.top;
    ti.rect.right = frst.right;
    ti.rect.bottom = frst.bottom;
    //добавляем подсказку для первого прямоугольничка
    SendMessage(tooltip_hwnd, TTM_ADDTOOL, 0, (LPARAM)(LPTOOLINFO)&ti);
     
    ti.uId = 2;
    ti.lpszText = "second";
    RECT scnd = {70, 20, 120, 50};
    ti.rect.left = scnd.left;
    ti.rect.top = scnd.top;
    ti.rect.right = scnd.right;
    ti.rect.bottom = scnd.bottom;
    //добавляем подсказку для второго прямоугольничка
    SendMessage(tooltip_hwnd, TTM_ADDTOOL, 0, (LPARAM)(LPTOOLINFO)&ti);
Всё работает отлично: наводим мышку на первый прямоугольник - отображается его всплывающая подсказка, наводим на второй - отображается подсказка второго. Здесь всё хорошо, но только не пойму, почему при сдвиге курсора с одного прямоугольника на другой, окошечко всплывающей подсказки исчезает, а новая подсказка открывается в уже новом окошке? Ведь прямоугольники стоят впритык друг к другу.
Я попробовал поэкспериментировать в C++ Builder с обычными кнопками. Кидаю две кнопки на форму, располагаю их рядом. Включаю у них отображать подсказки. Подвожу курсор к первой кнопке - её подсказка отображается; перевожу курсор ко второй кнопке - подсказка не исчезает, в ней просто обновляется текст. Вот мне нужно получить этот же эффект.
Подскажите, пожалуйста, что в коде нужно поправить для этого?
Спасибо!
0
03.09.2014, 09:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.09.2014, 09:25
Помогаю со студенческими работами здесь

Как изменить цвет текста всплывающих подсказок?
Как изменить цвет текста всплывающих подсказок? В настройках не меняется.

Прозрачность подсказок
не как не могу найти прозрачность подсказок искал три часа нечего не получается, в данный момент...

Система подсказок
Добрый день. Существует база данных, постоянно пополняющаяся обращениями (жалобы, происшествия,...

Value не присутствует в списке подсказок
Private Sub Command1_Click() Beep End End Sub Private Sub Text1_Change() End Sub Private Sub...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru