Вопрос

В своем заявлении я обращаюсь WM_HELP Сообщение, а затем создать всплывающую подсказку для управления, используя этот метод:

Взято из: http://msdn.microsoft.com/en-us/library/bb760252(v=vs.85).aspx

HWND CreateToolTip(int toolID, HWND hDlg, PTSTR pszText)
{
    if (!toolID || !hDlg || !pszText)
    {
        return FALSE;
    }
    // Get the window of the tool.
    HWND hwndTool = GetDlgItem(hDlg, toolID);

    // Create the tooltip. g_hInst is the global instance handle.
    HWND hwndTip = CreateWindowEx(NULL, TOOLTIPS_CLASS, NULL,
                              WS_POPUP |TTS_ALWAYSTIP | TTS_BALLOON,
                              CW_USEDEFAULT, CW_USEDEFAULT,
                              CW_USEDEFAULT, CW_USEDEFAULT,
                              hDlg, NULL, 
                              g_hInst, NULL);

   if (!hwndTool || !hwndTip)
   {
       return (HWND)NULL;
   }                              

    // Associate the tooltip with the tool.
    TOOLINFO toolInfo = { 0 };
    toolInfo.cbSize = sizeof(toolInfo);
    toolInfo.hwnd = hDlg;
    toolInfo.uFlags = TTF_IDISHWND | TTF_SUBCLASS;
    toolInfo.uId = (UINT_PTR)hwndTool;
    toolInfo.lpszText = pszText;
    SendMessage(hwndTip, TTM_ADDTOOL, 0, (LPARAM)&toolInfo);

    return hwndTip;
}

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

Мои вопросы:

  1. Разрушенная подсказка разрушена или просто скрыта?
  2. Если это скрыто, то как его уничтожить и когда?

Спасибо.

Это было полезно?

Решение

Прошло много времени с тех пор, как я сделал какое -либо программирование Winapi, но если моя память служит мне ...

Призыв к CreateWindowEx проходит hDlg как hwndparent Параметр, означающий диалоговое окно, теперь является родителем подсказки.

Из документации MSDN на DestroyWindow функция говорит:

Если указанное окно является окном родителя или владельца, DissomeWindow автоматически уничтожает связанного ребенка или окна, находящихся в собственности, когда оно разрушает окно родителя или владельца. Функция сначала разрушает ребенка или окна, принадлежащие к владельцу, а затем разрушает окно родителя или владельца.

Таким образом, вы можете предположить, что ваше окно подъема инструментов будет уничтожено в итоге. Анкет Будьте осторожны, если вы звоните CreateToolTip в ответ на каждый WM_HELP Сообщение, так как вы получите ряд окон для подъема инструментов, висящих в памяти, пока ваш диалог не будет закрыт, и DestroyWindow наконец -то называется.

Как отметил VZ0, вы можете создать подсказку один раз, держаться за ручку окон, а затем показать подсказку в ответ на помощь справочника, а не создавать его снова.

В своем комментарии к ответу VZ0 вы сказали:

Есть несколько способов, которыми подсказка идет Awya. Пример: мышь двигаться, тайм -аут и т. Д.

Все это приводит только к тому, что окно будет скрыто, поэтому ручка для подъема инструментов по -прежнему действительна и может быть повторно снимается с помощью ShowWindow.

Другие советы

Для каждого CreateWindowex Позвоните вам, вам нужно совпадение Уничтожить вызов.

В качестве альтернативы, вместо того, чтобы создавать и уничтожать окно каждый раз, когда вы можете использовать Витрина позвонить с SW_SHOW а также SW_HIDE Показать и скрыть всплывающее окно.

По моему опыту, я должен был DestroyWindow() На всплывающей подъеме, так что HFONT (Ресурс Font GDI) был должным образом выпущен. Однажды была связь между родительскими и детьми в двух окнах-но моя система меняет это во время выполнения и может быть виновата. Вероятно, нет никакого вреда в этом, если ваша система обобщает ее.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top