Роджер Джек - Исчерпывающее руководство по написанию всплывающих подсказок

Здесь есть возможность читать онлайн «Роджер Джек - Исчерпывающее руководство по написанию всплывающих подсказок» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Жанр: Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Исчерпывающее руководство по написанию всплывающих подсказок: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Исчерпывающее руководство по написанию всплывающих подсказок»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

Исчерпывающее руководство по написанию всплывающих подсказок — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Исчерпывающее руководство по написанию всплывающих подсказок», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

В общем случае, задержки реализуются через Windows-таймеры. В классе CWnd реализованы две функции, которые относятся к таймерам: CWnd::SetTimer и CWnd::KillTimer. CWnd::SetTimer устанавливает таймер, и принимает в качестве параметров ID таймера, временной интервал в миллисекундах и указатель на функцию, вызываемую по истечению указанного интервала. Если указатель на функцию равен NULL, то таймер использует сообщение WM_TIMER для уведомления окна о наступившем событии. CWnd::KillTimer останавливает таймер, принимая в качестве параметра ID таймера.

Заручившись такой поддержкой, давайте посмотрим, как можно добавить задержки к написанным вами подсказкам. Я покажу, как реализовать эквивалент 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 – прим.пер.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «Исчерпывающее руководство по написанию всплывающих подсказок»

Представляем Вашему вниманию похожие книги на «Исчерпывающее руководство по написанию всплывающих подсказок» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


libcat.ru: книга без обложки
Роджер Желязны
Отзывы о книге «Исчерпывающее руководство по написанию всплывающих подсказок»

Обсуждение, отзывы о книге «Исчерпывающее руководство по написанию всплывающих подсказок» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x