powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Простой вопрос по тултипам.
3 сообщений из 3, страница 1 из 1
Простой вопрос по тултипам.
    #32995514
Siebentearbeit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нашёл у себя в программе меморилик, связанный с тултипами:

У меня есть ситуации, когда генерится несколько десятков окон в секунду, у всех есть тултипы, все эти окна тут же умирают, рождаются новые, итд, итп.

Дык вот...
После TTM_DELTOOL такое чувство, что память не освобождается...
Кто-нибудь может дать кусок кода с корректной работой с тултипами в Win32API?
_без_ MFC тока... проект у меня винапишный...
...
Рейтинг: 0 / 0
Простой вопрос по тултипам.
    #32995796
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Могу сказать только одно по этому поводу - если найдешь пример С MFC, его легко будет переделать на БЕЗ MFC, поскольку CToolTipCtrl - это примитивный врапер над WINAPI.

Если найдешь пример - прошу его запостить и сюда тоже, поскольку я б тоже с удовольствием посмотрел на него.
...
Рейтинг: 0 / 0
Простой вопрос по тултипам.
    #32996275
Sie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sie
Гость
Пример не нашёл. Но пофиксал.
Не знаю, что было...

Вот код(ногами не пинать!):
Комменатрии к фиксу русскими буквами.

Код: plaintext
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.
void BindTip(HWND hWnd,char *str)
{    RECT rect;
    TOOLINFO ti = { 0 };// эту инициализацию сделал
    GetClientRect (hWnd, &rect);

    ti.cbSize = sizeof(TOOLINFO);
    ti.uFlags = TTF_SUBCLASS|TTF_IDISHWND;
    ti.hwnd = hWnd;
    //убрал этот инстанс из инициализации
    //ti.hinst = (HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE);
    ti.uId = (UINT)hWnd;
    ti.lpszText = str;
    ti.rect = rect;

    if(hTip)
        SendMessage(hTip, TTM_ADDTOOL,  0 , (LPARAM) (LPTOOLINFO) &ti);
}

void DropTip(HWND hWnd)
{    RECT rect;
    TOOLINFO ti = { 0 };                // и тут тоже обнулил.
    GetClientRect(hWnd,&rect);

    ti.cbSize = sizeof(TOOLINFO);
    ti.uFlags = TTF_SUBCLASS|TTF_IDISHWND;
    ti.hwnd = hWnd;
    //и тут тоже убрал
    //ti.hinst = (HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE);
    ti.uId = (UINT)hWnd;
    ti.lpszText = "";
    ti.rect = rect;

    if(hTip)
        SendMessage(hTip,TTM_DELTOOL,  0 , (LPARAM) (LPTOOLINFO) &ti);
}

Таким образом - убрал тока HINSTANCE и присваивание сделал - меморилик пропал. hTip - хэндл окна тултипа. Во втором вызове рект необязателен ;)

Всё. Всем спасиба! :)

PS. НВС. Рект при инициализации обязателен! Помницца... целую ночь убил, пока нашёл почему не инициализируется...(инициализация шла из dll-ины, поэтому путей разных поиска было много...) оказывается окно 0х0....
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Простой вопрос по тултипам.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]