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


Авторские права

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

Здесь можно скачать бесплатно "Роджер Джек - Исчерпывающее руководство по написанию всплывающих подсказок" в формате fb2, epub, txt, doc, pdf. Жанр: Программирование. Так же Вы можете читать книгу онлайн без регистрации и SMS на сайте LibFox.Ru (ЛибФокс) или прочесть описание и ознакомиться с отзывами.
Рейтинг:
Название:
Исчерпывающее руководство по написанию всплывающих подсказок
Автор:
Издательство:
неизвестно
Год:
неизвестен
ISBN:
нет данных
Скачать:

99Пожалуйста дождитесь своей очереди, идёт подготовка вашей ссылки для скачивания...

Скачивание начинается... Если скачивание не началось автоматически, пожалуйста нажмите на эту ссылку.

Вы автор?
Жалоба
Все книги на сайте размещаются его пользователями. Приносим свои глубочайшие извинения, если Ваша книга была опубликована без Вашего на то согласия.
Напишите нам, и мы в срочном порядке примем меры.

Как получить книгу?
Оплатили, но не знаете что делать дальше? Инструкция.

Описание книги "Исчерпывающее руководство по написанию всплывающих подсказок"

Описание и краткое содержание "Исчерпывающее руководство по написанию всплывающих подсказок" читать бесплатно онлайн.








Для добавления ActiveX-элемента на страницу я использовал ActiveX Control Pad, который доступен для бесплатного скачивания по адресу http://www.microsoft.com/workshop/author/cpad/cpad.htm. На рисунке 4 показан сгенерированный этой утилитой HTML-код. В этом коде определяются значения OBJECT ID, WIDTH, HEIGHT, и CLASSID. Также у элемента ActiveX имеется список параметров, или свойств. Параметр ToolTipText (имеющий значение "WebButton ToolTip Test") задает текст подсказки для нашей кнопки. Строка

<SCRIPT LANGUAGE="VBScript">

является началом короткой процедуры на языке VBScript, которую я написал для обработки нажатия на кнопку. При щелчке на кнопке появляется информационное окно с сообщением "WebButton was clicked".

Добавление DataTips

Демонстрационный проект DTDemo

Элементы DataTips используются для предоставления детальной информации о данных, отображаемых в окне. Например, Microsoft использует DataTips в Visual C++® для показа значений переменных. Вы наводите курсор мыши на переменную во время отладки и видите текущее значение этой переменной в появившейся подсказке. DataTips полезны в любой ситуации, когда об объекте имеется больше информации, чем можно разместить в окне.

В этом примере я использую новые возможности элементов ToolTip, ставшие доступными с появлением IE 4.0 Common Controls DLL, для создания элементов DataTips, в которых содержится информация о нарисованных кругах (см. рис.6). Я создаю круги различных размеров и цветов в случайных местах окна. Когда курсор мыши находится над кругом, появляется многострочный DataTip, в котором указаны координаты центра, радиус и цвет круга. Цвет подсказки соответствует цвету круга. Многострочные подсказки с возможностью изменения цвета текста в них доступны только при инсталлированном IE 4.0.

Рис.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) {

 CDTDemoDoc* pDoc = GetDocument();

 ASSERT_VALID(pDoc);

 // Проверяем в обратном порядке, чтобы корректно обработать

 // перекрывающиеся круги

 const CCircle *pCircleHit = NULL;

 for (int n = pDoc->GetCircleCount() – 1; n >= 0 && pCircleHit == NULL; n--) {

  if (pDoc->GetCircle(n).HitTest(Point)) {

   pCircleHit = &(pDoc->GetCircle(n));

  }

 }

 return pCircleHit;

}


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

// CDTDemoView drawing

void CDTDemoView::OnDraw(CDC* pDC) {

 CDTDemoDoc* pDoc = GetDocument();

 ASSERT_VALID(pDoc);

 for (int n = 0; n < pDoc->GetCircleCount(); n++) {

  pDoc->GetCircle(n).Draw(pDC);

 }

}

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

// CDTDemoView diagnostics

#ifdef _DEBUG

void CDTDemoView::AssertValid() const {

 CView::AssertValid(); } void CDTDemoView::Dump(CDumpContext& dc) const {

 CView::Dump(dc);

}

CDTDemoDoc* CDTDemoView::GetDocument() // non-debug version is inline

{

 ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDTDemoDoc)));

 return (CDTDemoDoc*)m_pDocument;

}

#endif //_DEBUG


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

// CDTDemoView message handlers

void CDTDemoView::OnInitialUpdate() {

 CView::OnInitialUpdate();

 CRect ClientRect(0, 0, 1000, 1000);

 if (m_ToolTip.Create(this, TTS_ALWAYSTIP) && m_ToolTip.AddTool(this)) {

  m_ToolTip.SendMessage(TTM_SETMAXTIPWIDTH, 0, SHRT_MAX);

  m_ToolTip.SendMessage(TTM_SETDELAYTIME, TTDT_AUTOPOP, SHRT_MAX);

  m_ToolTip.SendMessage(TTM_SETDELAYTIME, TTDT_INITIAL, 200);

  m_ToolTip.SendMessage(TTM_SETDELAYTIME, TTDT_RESHOW, 200);

 } else {

 TRACE("Error in creating ToolTip");

 }

}


BOOL CDTDemoView::OnToolTipNeedText(UINT id, NMHDR * pNMHDR, LRESULT * pResult) {

 BOOL bHandledNotify = FALSE;

 CPoint CursorPos;

 VERIFY(::GetCursorPos(&CursorPos));

 ScreenToClient(&CursorPos);

 CRect ClientRect;

 GetClientRect(ClientRect);

 // Удостовериться, что курсор попадает в клиентскую область окна,

 // потому что библиотека тоже хочет получать эти сообщения для

 // показа подсказок на панели инструментов.

 if (ClientRect.PtInRect(CursorPos)) {

  TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR;

  m_pCircleHit = HitTest(CursorPos);

  if (m_pCircleHit) {

   // Adjust the text by filling in TOOLTIPTEXT

   CString strTip;

   const CPoint& Center = m_pCircleHit->GetCenter();

   COLORREF Color = m_pCircleHit->GetColor();

   strTip.Format("Center: (%d, %d)\nRadius: %d\nColor: (%d, %d, %d)", Center.x, Center.y, m_pCircleHit->GetRadius(), (int)GetRValue(Color), (int)GetGValue(Color), (int)GetBValue(Color));

   ASSERT(strTip.GetLength() < sizeof(pTTT->szText));


На Facebook В Твиттере В Instagram В Одноклассниках Мы Вконтакте
Подписывайтесь на наши страницы в социальных сетях.
Будьте в курсе последних книжных новинок, комментируйте, обсуждайте. Мы ждём Вас!

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

Книги похожие на "Исчерпывающее руководство по написанию всплывающих подсказок" читать онлайн или скачать бесплатно полные версии.


Понравилась книга? Оставьте Ваш комментарий, поделитесь впечатлениями или расскажите друзьям

Все книги автора Роджер Джек

Роджер Джек - все книги автора в одном месте на сайте онлайн библиотеки LibFox.

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

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

Отзывы читателей о книге "Исчерпывающее руководство по написанию всплывающих подсказок", комментарии и мнения людей о произведении.

А что Вы думаете о книге? Оставьте Ваш отзыв.