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

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

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

Если найдешь пример - прошу его запостить и сюда тоже, поскольку я б тоже с удовольствием посмотрел на него.
...
Рейтинг: 0 / 0
04.04.2005, 13:50
    #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
Форумы / C++ [игнор отключен] [закрыт для гостей] / Простой вопрос по тултипам. / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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