Как добавить всплывающие подсказки для элементов управления
От: Аноним  
Дата: 10.06.01 01:40
Оценка: 150 (4)
Статья:
Как добавить всплывающие подсказки для элементов управления диалога?
Автор(ы): Игорь Вартанов, Александр Шаргин


Авторы:
Alexander Shargin
Игорь Вартанов

Аннотация:
Ограничимся простейшим (но не самым бесполезным!) набором функций, которые мы хотим получить от подсказок. Чаще всего необходимо добавить появление подсказки для определенных областей окна (будь то контролы или отведенные для этой цели прямоугольники), кроме того необходимо иметь возможность изменять текст подсказок и при определенных обстоятельствах блокировать их вывод. Разобравшись с указанными вопросами, достаточно легко расширить функциональность и вариативность их поведения.
Мне кажется есть более простой способ
От: Willi Интернет  
Дата: 11.06.01 01:40
Оценка:
В OnInitDialog добавляем

...
    EnableToolTips();
...

а в OnGetDispInfo пишем следующий код

void CDlgTipsDlg::OnToolTipInfo(UINT id, NMHDR* pNMHDR, LRESULT* pResult)
{
    NMTTDISPINFO* pTTDispInfo = (NMTTDISPINFO*)pNMHDR;

    UINT nCtrlId = pNMHDR->idFrom;
    if(pTTDispInfo->uFlags & TTF_IDISHWND)
        nCtrlId = ::GetDlgCtrlID((HWND)pNMHDR->idFrom);

    CString sText;
    if(sText.LoadString(nCtrlId))
        _tcsncpy(pTTDispInfo->szText, sText, 80);
}

этот код предполагает наличие в String Table строчек, идентификаторы которых
совпадают с идентификаторами контролов диалога.

В этом случае не нужно создавать CToolTipCtrl
__________________________________
Василий Черневич (aka Willi)
Re:Мне кажется есть более простой способ
От: Willi Интернет  
Дата: 11.06.01 01:59
Оценка:
Упс
Баг закрался

правильней будет

...
    USES_CONVERSION;
    CString sText;
    if(sText.LoadString(nCtrlId))
        strncpy(pTTDispInfo->szText, T2A((LPTSTR)(LPCTSTR)sText), 80);
__________________________________
Василий Черневич (aka Willi)
Re:Мне кажется есть более простой способ
От: Alexander Shargin Россия RSDN.ru
Дата: 21.06.01 05:16
Оценка:
Лично я не люблю этот метод из-за полной потери гибкости. При его использовании решение даже такой тривиальной задачи, как изменение цвета тултипа или времени его нахождения на экране, становится непростым делом + приходится полагаться на недокументированные возможности MFC (нигде не сказано, что CToolTipCtrl лежит в структуре данных потока). Кроме того, MFC постоянно создаёт и разрушает тултип, и его свойства приходится настраивать каждый раз по новой. Чем наживать себе подобный геморрой, проще сразу создать свой CToolTipCtrl и не мучиться... :)

Но это, конечно, исключительно моё ИМХО.


С уважением,
Александр
--
Я думал, ты огромный страшный Бажище,
А ты недоучка, крохотный Бажик...
Re: Как добавить всплывающие подсказки для элементов управле
От: yaroslav_v http://yaroslav-v.chat.ru
Дата: 20.11.03 12:46
Оценка:
Первый способ имеет тот недостаток, что если окно Disable'ено, то tool-tip не будет показываться -- он же работает через subclassing и естественно не получает никаких сообщений, когда окно disable'ed.
Re: Как добавить всплывающие подсказки для элементов управле
От: Аноним  
Дата: 25.05.04 12:53
Оценка:
У меня есть окно (главное окно), в которое поток вставляется другое, это другое окно создается в DLL, в качестве параметра функции создания окна, которая находится в DLL, передается HWND главного окна. Ни пнрвый не второй способ описаный сдесь не работает. Как заставить их появиться?

Thrasher.
Re[2]: Как добавить всплывающие подсказки для элементов упра
От: Аноним  
Дата: 25.05.04 13:40
Оценка:
Здравствуйте, Аноним, Вы писали:

А>У меня есть окно (главное окно), в которое поток вставляется другое, это другое окно создается в DLL, в качестве параметра функции создания окна, которая находится в DLL, передается HWND главного окна. Ни пнрвый не второй способ описаный сдесь не работает. Как заставить их появиться?


А>Thrasher.


Создать тултип и принудительно сказать ему TTN_SHOW
Re: Как добавить всплывающие подсказки для элементов управле
От: DmitryT  
Дата: 14.03.05 09:57
Оценка:
Здравствуйте, Игорь Вартанов, Александр Шаргин, Вы писали:

ИВА>Статья:

ИВА>Как добавить всплывающие подсказки для элементов управления диалога?
Автор(ы): Игорь Вартанов, Александр Шаргин


В большом диалоге (точнее — в одной из закладок : public CPropertyPage) все прописал, как Вы велели.
Но при заходе в OnInitDialog() на строке
m_ToolTip.Create(this);

попадаю в
ASSERT(pWnd->m_hWnd == NULL);   // only do once
в функции AfxHookWindowCreate (строка 639 в файле WINCORE.CPP)
Откуда ''наводка''?

P.S. В этой закладке очень много элементов управления. Большинство из них со встроенными ToolTip, но для одного из них (CStaticIconButton) всплывающие подсказки не появляются. Поэтому и решил применить ''классику''.
Мы знаем: время растяжимо. Оно зависит от того,
Какого рода содержимым Вы заполняете его. (C. Маршак)
Re: Как добавить всплывающие подсказки для элементов управле
От: DmitryT  
Дата: 15.03.05 06:03
Оценка:
Неужели ни у кого никаких идей?
На всяк случай добавил в конструктор:
    m_ToolTip.m_hWnd = NULL;

Не помогло.
Мы знаем: время растяжимо. Оно зависит от того,
Какого рода содержимым Вы заполняете его. (C. Маршак)
Re: Как добавить всплывающие подсказки для элементов управле
От: se-ga Украина  
Дата: 28.06.05 10:51
Оценка:
Здравствуйте, Игорь Вартанов, Александр Шаргин, Вы писали:

ИВА>Статья:

ИВА>Как добавить всплывающие подсказки для элементов управления диалога?
Автор(ы): Игорь Вартанов, Александр Шаргин



строку

for(int i=0; i<sizeof(ID)sizeof(int); i++)

нужно писать

for(int i=0; i<sizeof(ID) / sizeof(int); i++)

--

спасибо за пример, вам бы msdn написать
по настоящему начинаешь ценить basic только изучая с++ (международная мудрость)
Как добавить всплывающие подсказки в диалог WTL
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 02.02.06 15:38
Оценка: 1 (1) +1
#Имя: FAQ.wtl.tooltips
Здравствуйте, Игорь Вартанов, Александр Шаргин, Вы писали:

ИВА>Статья:

ИВА>Как добавить всплывающие подсказки для элементов управления диалога?
Автор(ы): Игорь Вартанов, Александр Шаргин


до кучи к WinAPI и MFC — как то же самое делается в WTL:

  • добавляем в данные диалога CToolTipCtrl (atlctrls.h):

    class CMainDlg : public CAxDialogImpl<CMainDlg>,
       public CWinDataExchange<CMainDlg>
    {
      ...
    private:
       CToolTipCtrl tooltip_;
       CEdit edit1;
       CButton CancelBtn_;
       CButton OkBtn_;
    };

  • в OnInitDialog() вставляем инициализацию tooltip_:

    LRESULT CMainDlg::OnInitDialog( UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/ )
    {
       ...
         
       // создание тултипа
       tooltip_.Create( m_hWnd, rcDefault, NULL, WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP, WS_EX_TOPMOST );
       ATLASSERT( tooltip_.IsWindow() );
    
       //Связываем контролы с тултипами
       ATLVERIFY( tooltip_.AddTool( &CToolInfo( TTF_SUBCLASS,
                                                edit1, 
                                                0, // будет заполнено автоматом и добавлен TTF_IDISHWND
                                                NULL,
                                                "Это поле для ввода текста" ) ) );
    
       ATLVERIFY( tooltip_.AddTool( &CToolInfo( TTF_SUBCLASS,
                                                OkBtn_, 0, NULL,
                                                "А это кнопка для выхода из программы" ) ) );
    
       ATLVERIFY( tooltip_.AddTool( &CToolInfo( TTF_SUBCLASS,
                                                CancelBtn_, 0, NULL,
                                                "А это еще одна кнопка для выхода из программы" ) ) );
    
       ATLVERIFY( tooltip_.AddTool( &CToolInfo( TTF_SUBCLASS,
                                                GetDlgItem( IDC_STATIC_TEXT ), 0, NULL,
                                                "А это static со стилем Notify" ) ) );
    
       // разрешаем переносы строк
       tooltip_.SetMaxTipWidth( 300 );
    
       tooltip_.Activate( TRUE );
    
       return TRUE;
    }

  • все



    Демо-проект — wtltooltips.rar
    ... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
  • Re: Как добавить всплывающие подсказки в диалог WTL
    От: AlexKom  
    Дата: 20.04.07 14:54
    Оценка:
    Здравствуйте, Odi$$ey, Вы писали:

    OE>Здравствуйте, Игорь Вартанов, Александр Шаргин, Вы писали:


    ИВА>>Статья:

    ИВА>>Как добавить всплывающие подсказки для элементов управления диалога?
    Автор(ы): Игорь Вартанов, Александр Шаргин


    OE>до кучи к WinAPI и MFC — как то же самое делается в WTL:


    добрый день! столкнулся с такой интересной проблемой (относится к ATL/WTL проектам):

    Тултип для Edit поля после кликания на нам пропадает. И не появляется до того момента, пока сначала не покажется другой тултип (если брать пример из статьи — то надо посмотреть тултип на кнопке, а потом опять будет показываться тултип на edit-е).

    Как с этим бороться? подскажите
     
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.