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

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

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

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

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

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

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

Интервал:

Закладка:

Сделать

m_bMouseCaptured = TRUE;

}

/////////////////////////////////////////////////////////////////////////////

// CTitleTipListBox message handlers

LONG CTitleTipListBox::OnContentChanged(UINT, LONG) {

// Turn off title tip.

AdjustTitleTip(m_nNoIndex);

return Default();

}

void CTitleTipListBox::OnMouseMove(UINT nFlags, CPoint point) {

if (point != m_LastMouseMovePoint && IsAppActive()) {

m_LastMouseMovePoint = point;

int nIndexHit = m_nNoIndex;

CRect ClientRect;

GetClientRect(ClientRect);

if (ClientRect.PtInRect(point)) {

// Hit test.

for (int n = 0; nIndexHit == m_nNoIndex && n < GetCount(); n++) {

CRect ItemRect;

GetItemRect(n, ItemRect);

if (ItemRect.PtInRect(point)) {

nIndexHit = n;

}

}

}

AdjustTitleTip(nIndexHit);

}

CListBox::OnMouseMove(nFlags, point);

}

void CTitleTipListBox::OnSelchange() {

int nSelIndex;

if (GetStyle() & LBS_MULTIPLESEL) {

nSelIndex = GetCaretIndex();

} else {

nSelIndex = GetCurSel();

}

AdjustTitleTip(nSelIndex);

m_TitleTip.InvalidateRect(NULL);

m_TitleTip.UpdateWindow();

}

void CTitleTipListBox::OnKillFocus(CWnd* pNewWnd) {

CListBox::OnKillFocus(pNewWnd);

if (pNewWnd != &m_TitleTip) {

AdjustTitleTip(m_nNoIndex);

}

}

void CTitleTipListBox::OnDestroy() {

AdjustTitleTip(m_nNoIndex);

m_TitleTip.DestroyWindow();

CListBox::OnDestroy();

}

void CTitleTipListBox::OnLButtonDown(UINT nFlags, CPoint point) {

// Временно отключить захват мыши, так как базовый класс может

// захватить мышь.

if (m_bMouseCaptured) {

ReleaseCapture();

m_bMouseCaptured = FALSE;

}

CListBox::OnLButtonDown(nFlags, point);

if (m_TitleTip.IsWindowVisible()) {

m_TitleTip.InvalidateRect(NULL);

if (this != GetCapture()) {

CaptureMouse();

}

}

}

void CTitleTipListBox::OnLButtonUp(UINT nFlags, CPoint point) {

CListBox::OnLButtonUp(nFlags, point);

if (this != GetCapture() && m_TitleTip.IsWindowVisible()) {

CaptureMouse();

}

}

BOOL CTitleTipListBox::PreTranslateMessage(MSG* pMsg) {

switch (pMsg->message) {

case WM_RBUTTONDOWN:

case WM_RBUTTONUP:

case WM_LBUTTONDBLCLK:

case WM_RBUTTONDBLCLK:

// Активизировать окно представления, потому что такое

// поведение подразумевается по сообщению WM_MOUSEACTIVATE,

// когда над окном нет никаких подсказок.

AdjustTitleTip(m_nNoIndex);

CFrameWnd* pFrameWnd = GetParentFrame();

if (pFrameWnd) {

BOOL bDone = FALSE;

CWnd* pWnd = this;

while (!bDone) {

pWnd = pWnd->GetParent();

if (!pWnd || pWnd == pFrameWnd) {

bDone = TRUE;

}

else if (pWnd->IsKindOf(RUNTIME_CLASS(CView))) {

pFrameWnd->SetActiveView((CView*)pWnd);

bDone = TRUE;

}

}

}

break;

}

return CListBox::PreTranslateMessage(pMsg);

}

Функция CTitleTipListBox::GetIdealItemRect вычисляет размер и координаты идеальной строки списка. Параметр nIndex – это индекс нужной строки. Параметр lpRect используется для того, чтобы вернуть идеальный размер и координаты в клиентской системе координат. Вы должны переопределить этот метод для элемента "список" с пользовательской отрисовкой, и далее я покажу, как с этим справляется CODListBox. Если не переопределить этот метод для элемента "список" с пользовательской отрисовкой, то метод CTitleTipListBox::GetIdealItemRect выдаст TRACE-сообщение об ошибке. Однако для обычных элементов "список" этот метод автоматически вычисляет размер и координаты идеальной строки списка. Сначала он вызывает функцию CListBox::GetItemRect для вычисления высоты и ширины строки. Ширина строки, возвращенная CListBox::GetItemRect является шириной самого элемента "список", а не шириной текста. Чтобы вычислить настоящую ширину текста подсказки, я получаю текст и шрифт для строки и вызываю CDC::GetTextExtent. Затем в lpRect подставляется максимум от ширины строки и вычисленной ширины строки (плюс немного места по краям из эстетических соображений).

Функция CTitleTipListBox::AdjustTitleTip показывает или прячет элемент TitleTip. Параметр nNewIndex является индексом строки для отображения. Он может принимать значение константы m_nNoIndex, если подсказка не нужна ни для одной строки. Функция создает элемент ToolTip, если он еще не создан. Если в качестве индекса строки передается m_nNoIndex, функция прячет текущую подсказку. В противном случае функция получает размеры идеальной строки вызовом CTitleTipListBox::GetIdealItemRect. Если размеры идеальной строки совпадают с размерами, возвращенными функцией CListBox::GetItemRect, то в подсказке нет необходимости, и подсказка прячется. Если размеры отличаются, то функция изменяет размеры идеальной строки таким образом, чтобы она поместилась на экране и показывает подсказку. Если элемент TitleTip видима, делается захват мыши, чтобы узнать момент, когда подсказку следует скрыть. Другими словами, если курсор мыши не находится ни над одной строкой, функция должна скрыть подсказку; если элемент TitleTip невидим, то функция освобождает мышь. Для захвата курсора мыши используется функция CTitleTipListBox::CaptureMouse. Она сохраняет позицию курсора в клиентской системе координат в переменной CTitleTipListBox::m_LastMouseMovePoint, а также устанавливает флаг m_bMouseCaptured в значение TRUE для индикации того, что курсор мыши теперь захвачен.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

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

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


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

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

x