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

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

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

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

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

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

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

Интервал:

Закладка:

Сделать

Рис.6. Пример использования элемента DataTip

С помощью AppWizard я сгенерировал приложение с однодокументным интерфейсом (SDI), отключив опцию "предварительный просмотр при печати" и оставив остальные по умолчанию. Для реализации нужной функциональности я создал или изменил три класса: CCircle, CDTDocument, и CDTView.

CCircle – простой класс, реализующий рисование круга и определение принадлежности точки кругу (hit-testing). Код определения принадлежности точки кругу показан на рис.7. В переменных CCircle::m_CenterPoint, CCircle::m_nRadius, и CCircle::m_Color хранятся, соответственно, координаты центра, радиус и цвет круга. CCircle::Initialize принимает в качестве параметров координаты центра, радиус и цвет и использует их для инициализации соответствующих переменных класса круга. Я предпочел инициализировать переменные класса через функцию CCircle::Initialize, а не через конструктор класса, потому что так легче создавать массив кругов в классе CDTDocument. Все станет понятно, когда мы будем рассматривать класс CDTDocument.

Рис.7. Реализация алгоритма hit-testing в классе CCircle

///////////////////////////////////////////////////////////////////////////// // CCircle hittesting

inline double Square(int n) { return (double(n) * double(n)); }

BOOL CCircle::HitTest(const CPoint& Point) const {

CPoint Diff = m_CenterPoint – Point;

return ((Square(Diff.x) + Square(Diff.y)) <= Square(m_nRadius));

}

CCircle::Draw принимает указатель на контекст устройства, в котором круг должен себя нарисовать. Функция вычисляет координаты квадрата, в который будет вписан круг, создает кисть нужного цвета, после чего использует CDC::Ellipse, чтобы нарисовать круг в контексте устройства. CCircle::HitTest принимает координаты тестируемой точки и использует теорему Пифагора (a² + b² = c²) для определения принадлежности точки окну, сравнивая c2 с радиусом круга. Я определил встроенную функцию Square (возведение в квадрат), чтобы повысить читабельность кода. Встроенные методы CCircle::GetColor, CCircle::GetCenter, и CCircle::GetRadius возвращают, соответственно, переменные класса m_Color, m_CenterPoint, и m_nRadius. Я описал эти функции, а также функции CCircle::Draw и CCircle::HitTest как константные, поскольку они не изменяют внутреннее состояние класса. Другими словами, они сохраняют константность класса. Это хороший стиль программирования, потому что он позволяет вам использовать константные экземпляры CCircle.

CDTDemoDoc унаследован от CDocument. В этом классе хранится массив объектов CCircle, а также определены функции CDTDemoDoc::GetCircleCount и CDTDemoDoc::GetCircle для доступа к информации об этом массиве. CDTDemoDoc::GetCircle принимает целочисленный индекс, указывающий на смещение в массиве. Объекты CCircle хранятся в переменной CDTDemoDoc::m_CircleArray размером CIRCLECOUNT. Я мог бы объявить этот массив как открытый (public), но не сделал этого по двум причинам. Во-первых, реализацию легче менять, если ее детали скрыты от внешнего мира. Допустим, я захочу в будущем использовать для реализации массива переменного размера шаблон CArray. Во-вторых, я хочу возвращать константные ссылки пользователям CDTDemoDoc::GetCircle, чтобы они не смогли случайно изменить объекты кругов в массиве. CDTDemoDoc::CDTDemoDoc вызывает CCircle::Initialize для каждого круга в массиве. CCircle::Initialize облегчает создание массивов фиксированного размера, потому что мне не нужно передавать параметры конструктору CCircle. В противном случае мне пришлось бы создавать массив динамически. Я использовал функцию rand для установки координат кругов. Генератор случайных чисел инициализируется текущим значением времени, поэтому довольно высока вероятность того, что позиция каждого круга будет разной каждый раз, когда вы запускаете приложение.

Класс CDTDemoView ответственен за отображение кругов и реализацию элементов DataTip (см. рис.8). В переменной CDTDemoView::m_ToolTip хранится элемент ToolTip, который выступает в качестве DataTip. Я хотел, чтобы этот пример показал вам, как использовать класс CToolTipCtrl напрямую, вместо использования функций класса CWnd. Однако, в данном случае, даже если я захотел использовать CWnd, я бы не смог, потому что мне нужен прямой доступ к элементу ToolTip, чтобы посылать ему сообщения. CWnd не предоставляет документированных способов доступа к создаваемому им элементу ToolTip, а я не хотел бы полагаться на детали конкретной реализации. CDTDemoView::m_pCircleHit хранит круг под курсором мыши. Если ни один из кругов не попадает под курсор мыши, CDTDemoView::m_pCircleHit может быть NULL.

Рис.8. DTDemoView

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

// DTDemoView.cpp : implementation of the CDTDemoView class

.

.

.

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

// CDTDemoView HitTest

const CCircle* CDTDemoView::HitTest(const CPoint& Point) {

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

Интервал:

Закладка:

Сделать

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

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


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

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

x