Роджер Джек - Исчерпывающее руководство по написанию всплывающих подсказок
Скачивание начинается... Если скачивание не началось автоматически, пожалуйста нажмите на эту ссылку.
Жалоба
Напишите нам, и мы в срочном порядке примем меры.
Описание книги "Исчерпывающее руководство по написанию всплывающих подсказок"
Описание и краткое содержание "Исчерпывающее руководство по написанию всплывающих подсказок" читать бесплатно онлайн.
Заручившись такой поддержкой, давайте посмотрим, как можно добавить задержки к написанным вами подсказкам. Я покажу, как реализовать эквивалент TTDT_AUTOPOP сообщения TTM_SETDELAYTIME. Сообщение с этим параметром устанавливает время задержки перед скрытием подсказки, если курсор мыши неподвижен.
Во-первых, добавим protected– или private-переменные в наш класс, чтобы хранить ID таймера и координаты курсора мыши, когда подсказка видна на экране. Также добавим константу, в которой будет находиться время задержки до автоматического скрытия подсказки. Код будет выглядеть следующим образом:
class CCustomTip: public CWnd {
.
.
.
protected:
const int m_nAutoPopDelay; // В миллисекундах.
UINT m_nTimerId;
CPoint m_LastMousePosition;
.
.
.
};
В конструкторе инициализируем константу m_nAutoPopDelay значением 10000 (десять секунд), а m_nTimerId установим в 0.
CCustomTip::CCustomTip : m_nAutoPopDelay(10000), m_LastMousePosition(0, 0) {
.
.
.
m_nTimerId = 0;
.
.
.
}
Вы можете установить любой интервал – я задал 10 секунд только в целях демонстрации задержки.
Добавьте код, который запускает таймер, когда показывается подсказка. Например, если бы существовала функция CCustomTip::Show, вы бы добавили следующий код в метод, показывающий окно:
void CCustomTip::Show {
.
.
.
if (m_nTimerId > 0) {
VERIFY(KillTimer(m_nTimerId));
m_nTimerId = 0;
}
VERIFY(::GetCursorPos(&m_LastMousePosition));
m_nTimerId = SetTimer(1, m_nAutoPopDelay, NULL);
ASSERT(m_nTimerId != 0);
.
.
.
}
Добавьте код для обработки сообщений таймера. Добавьте обработчик сообщения WM_TIMER с помощью ClassWizard. Код обработчика должен выглядеть следующим образом:
void CTitleTip::OnTimer(UINT nIDEvent) {
CPoint CurrentMousePosition;
VERIFY(::GetCursorPos(&CurrentMousePosition));
if (CurrentMousePosition == m_LastMousePosition) {
Hide();
} else {
m_LastMousePosition = CurrentMousePosition;
}
}
Наконец, добавьте в CCustomTip::Hide код, останавливающий таймер:
void CCustomTip::Hide() {
if (m_nTimerId > 0) {
VERIFY(KillTimer(m_nTimerId));
m_nTimerId = 0;
} ShowWindow(SW_HIDE);
}
Таким же образом можно реализовать другие типы задержек стандартных элементов ToolTip, но придется отслеживать больше изменений, чем координаты курсора мыши. Например, для реализации эквивалента TTDT_RESHOW (интервал времени перед показом следующей подсказки при перемещении курсора мыши на другую строку, или инструмент) нужно будет создать переменные для хранения времени скрытия последней подсказки и ее содержимого.
Комментарии:
Искал способ попроще включить поддержку ToolTips без явного использования класса CToolTipCtrl. И в результате сам сделал следующее:
int CContentWnd::OnToolHitTest(CPoint point, TOOLINFO* pTI) const {
int nHit=0;
CString csText;
csText="Закрыть окно";
HWND m_hWnd=this->GetSafeHwnd();
pTI->hwnd = m_hWnd;
pTI->uId = (UINT)m_hWnd;
pTI->uFlags = TTF_IDISHWND;
pTI->lpszText=new char[csText.GetLength()+1];
lstrcpy(pTI->lpszText,(LPCTSTR)csText);
return nHit;
}
Подсказки можно выводить в любом месте окна
OLEGus1 15.8.2002 14:23Примечания
1
Эта информация несколько устарела. Сейчас в класс CToolTipCtrl входит функция SetDelayTime, чьи возможности эквивалентны возможностям TTM_SETDELAYTIME – прим. перев.
2
для этой цели можно также использовать CToolTipCtrl::SetMaxTipWidth – прим.пер.
3
что эквивалентно CToolTipCtrl::SetDelayTime – прим.пер.
4
справедливости ради нужно сказать, что значение SHRT_MAX дает задержку порядка 30 секунд, а не отключает автоисчезание полностью – прим.пер.
5
что эквивалентно CToolTipCtrl::SetTipTextColor – прим.пер.
Подписывайтесь на наши страницы в социальных сетях.
Будьте в курсе последних книжных новинок, комментируйте, обсуждайте. Мы ждём Вас!
Похожие книги на "Исчерпывающее руководство по написанию всплывающих подсказок"
Книги похожие на "Исчерпывающее руководство по написанию всплывающих подсказок" читать онлайн или скачать бесплатно полные версии.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
Отзывы о "Роджер Джек - Исчерпывающее руководство по написанию всплывающих подсказок"
Отзывы читателей о книге "Исчерпывающее руководство по написанию всплывающих подсказок", комментарии и мнения людей о произведении.