FAQ:WinAPI VCPP:всплывающая подсказка для CWnd
Материал из Весельчак У
Версия от 22:12, 3 октября 2009; RXL (обсуждение | вклад)
Как сделать всплывающую подсказку для класса CWnd и классов, от него производных?
Допустим, имеется диалог класса CMyDlg. Делаем подсказки для элементов управления (для элементов управления CStatic не забудьте поставить свойство Notify):
class CMyDlg:puplic CDialog { CToolTipCtrl m_ToolTip; // мембер класса CMyDlg }; // массив, в котором перечислены идентификаторы элементов управления // и тексты подсказок к ним struct { int ID; const char* pch; }; m_a_Tips[]= { {IDC_BUTTON1, "Кнопка"}, {IDC_STATIC1, "Текст"}, {0, 0} // признак конца массива }; // в инициализации диалога (хотя, в принципе, // можно и не тут) создаём и привязываем подсказки BOOL CMyDlg::OnInitDialog() { CDialog::OnInitDialog(); // создаём элемент TOOLTIP m_ToolTip.Create(this); // Привязка подсказок for(int i=0; m_a_Tips[i].ID; i++) { m_ToolTip.AddTool( GetDlgItem(m_a_Tips[i].ID), m_a_Tips[i].pch ); } // включаем показ подсказок m_ToolTip.Activate(1); ... } // для того, чтобы подсказки отображались как реакция на движение // курсора мыши, транслируем получаемые окнами сообщения в // виртуальной PreTranslateMessage() BOOL CMyDlg::PreTranslateMessage(MSG* pMsg) { // транслируем if(m_ToolTip.m_hWnd) { m_ToolTip.RelayEvent(pMsg); } return CDialog::PreTranslateMessage(pMsg); }