Шаг 245 - CWnd::EnableToolTips

BOOL EnableToolTips( BOOL bEnable );

Возвращаемое значение
TRUE если tooltips допускаются, иначе FALSE.

Параметры
bEnable
Определяет допускается tooltip для элемента управления или заблокирован. TRUE допускается для элемента управления, FALSE отключает для элемента управления.

Замечания
Вызовите эту функцию чтобы допустить tooltips для данного окна. Перегрузите OnToolHitTest, чтобы обеспечить TOOLINFO структуру для окна. Обратите внимание на некоторые окна, типа CToolBar которые обеспечивающие встроенную реализацию OnToolHitTest.
Просто вызова EnableToolTips не достаточно чтобы отобразить советы для ваших порожденных средств управления, если родительское окно не получено из CFrameWnd. Это потому что CFrameWnd обеспечивает заданный по умолчанию драйвер для TTN_NEEDTEXT сообщения. Если ваше родительское окно не получено из CFrameWnd то есть если оно - диалоговое окно или вид, подсказки для ваших порожденных средств управления не будут отображаться правильно, если Вы не обеспечиваете драйвер для TTN_NEEDTEXT сообщения. Заданные по умолчанию подсказки предусмотренного Вашим окном EnableToolTips, не имеют текста связанного с ними. Чтобы получать текст для подсказки для отображения TTN_NEEDTEXT сообщение послано родительскому окно прежде чем окно подсказки инструмента отображается. Если не имеется никакого драйвера для этого сообщения, чтобы назначить некоторое значение к pszText члену структуры TOOLTIPTEXT, не будет иметься никакого текста.

Пример

BEGIN_MESSAGE_MAP(CMyView, CView)
	//......
	ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, OnToolTipNotify)
	ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF, OnToolTipNotify)
END_MESSAGE_MAP()

void CMyView::OnInitialUpdate() 
{
	CView::OnInitialUpdate();
	CEdit* pEdit = new CEdit;
	pEdit->Create(ES_MULTILINE | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER,
		CRect(10, 10, 100, 100), this, 111);
	EnableToolTips(TRUE);   // Разрешаем подсказки для вида
}

//Драйвер Сообщения
BOOL CMyView::OnToolTipNotify(UINT id, NMHDR *pNMHDR,
	LRESULT *pResult)
{
	// Должны обработать, и ANSI и UNICODE версии сообщения
	TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR;
	TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;
	CString strTipText;
	UINT nID = pNMHDR->idFrom;
	if (pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) ||
		pNMHDR->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND))
	{
		// IdFrom - фактически HWND инструмента
		nID = ::GetDlgCtrlID((HWND)nID);
	}

	if (nID != 0) // Будет нуль на разделителе
		strTipText.Format("Control ID = %d", nID);

	if (pNMHDR->code == TTN_NEEDTEXTA)
		lstrcpyn(pTTTA->szText, strTipText, sizeof(pTTTA->szText));
	else
		_mbstowcsz(pTTTW->szText, strTipText, sizeof(pTTTW->szText));
	*pResult = 0;

	return TRUE;    // Сообщение обработано
}

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 31.12.2001