FAQ:WinAPI VCPP:всплывающая подсказка для CWnd

Материал из Весельчак У

Перейти к: навигация, поиск

Как сделать всплывающую подсказку для класса 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);
}