Re[2]: Контроль положения родительского окна из CEdit
От: avnazyrov  
Дата: 13.12.10 14:20
Оценка:
RB>popup-окну может и положено, а вот tooltip-у — нет.
Это tracking tooltip. Висит, пока не скажу ему обратное.
http://msdn.microsoft.com/en-us/library/bb760252(v=vs.85).aspx#tooltip_sample_tracking
Создаю его так:
...
    // Окно подсказки
    CWnd m_ttWin;
    // Указатель на элемент-родитель
    CWnd* m_pParent;
    // Структура парметров подсказки
    TOOLINFO m_toolItem;
...
    m_ttWin.CreateEx( WS_EX_TRANSPARENT, TOOLTIPS_CLASS, NULL,
        WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP | TTS_BALLOON,        
        CW_USEDEFAULT, CW_USEDEFAULT,
        CW_USEDEFAULT, CW_USEDEFAULT, 
        m_pParent->GetParent()->GetSafeHwnd(), NULL);
...
    // Заполняем структуру с параметрами подсказки
    memset(&m_toolItem, 0, sizeof(m_toolItem));
    m_toolItem.cbSize = sizeof(TOOLINFO);
    m_toolItem.uFlags = TTF_IDISHWND | TTF_TRACK | TTF_ABSOLUTE;
    m_toolItem.hwnd = m_pParent->GetSafeHwnd();
    m_toolItem.hinst = AfxGetInstanceHandle();
    m_toolItem.lpszText = L"I' m a tooltip!";
    m_toolItem.uId = (UINT_PTR)m_pParent->GetSafeHwnd();
    m_pParent->GetClientRect (&m_toolItem.rect);
    // Регистрируем нашу подсказку
    m_ttWin.SendMessage(TTM_ADDTOOL, 0, (LPARAM) &m_toolItem);
    // Устанавливаем начальные координаты показа
    m_pParent->GetWindowRect (&m_toolItem.rect);
    m_ttWin.SendMessage(TTM_TRACKPOSITION,
        0, (LPARAM)MAKELONG(m_toolItem.rect.left + 5, m_toolItem.rect.bottom + 5));
...


Показываю так:
...
    // Устанавливаем координаты показа
    m_pParent->GetWindowRect (&m_toolItem.rect);
    m_ttWin.SendMessage(TTM_TRACKPOSITION,
        0, (LPARAM)MAKELONG(m_toolItem.rect.left + 5, m_toolItem.rect.bottom));
    // Активируем новую подсказку
    m_ttWin.SendMessage(TTM_TRACKACTIVATE, TRUE, (LPARAM)&m_toolItem);
...


Прячу так:
...
m_ttWin.SendMessage(TTM_TRACKACTIVATE, FALSE, (LPARAM)&m_toolItem);
...


MFC я знаю довольно-таки паршиво, поэтому готов выслушать любые комментарии.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.