Практическое руководство. Реализация отслеживания в коде
Для отслеживания элемент OLE следует обрабатывать некоторые события, относящиеся к элементу, например выбрать элемент или обновить представление документа. Во всех случаях достаточно объявить временный объект CRectTracker и управления элементами посредством данного объекта.
Когда пользователь выбирает элемент или вставляет объект с помощью команды меню, необходимо инициализировать средство отслеживания с правильными стилями для представления состояние элемент OLE. В следующей таблице которых соглашения, используемые в примере OCLIENT. Дополнительные сведения об этих правилах см. в разделе CRectTracker.
Стили контейнера и состояния элемент OLE
Указанный стиль |
Состояние элемент OLE |
---|---|
Полученная точки граница |
Связанный элемент |
Сплошная граница |
Элемент вставлен в документе |
Маркеры изменения размеров |
Элемент выбран |
Насиженная граница |
Элемент в данный момент активен на месте |
Насиживать шаблон располагается поверх элемента |
Сервер элемента открыт |
Можно обработать инициализация легко с помощью этой процедуры, которая проверяет состояние элемент OLE и устанавливает соответствующие стили. Функция SetupTracker найдена в примере OCLIENT показывает инициализацию отслежывателя. Параметры для данной функции адрес отслежывателя, pTracker; указатель на член клиента, связанный с отслежывателю, pItem; и указатель на прямоугольника, pTrueRect. Более полный пример этой функции см. в примере MFC OCLIENT OLE.
Пример кода SetupTracker представляет одну функцию; смешиваются линии функции с обсуждением функций функции:
void CMainView::SetupTracker(CRectTracker* pTracker, CRectItem* pItem,
CRect* pTrueRect)
Tracker инициализируется с помощью установки минимальный размер и для стиля отслежывателя.
// set minimum size for our OLE items
pTracker->m_sizeMin.cx = 8;
pTracker->m_sizeMin.cy = 8;
pTracker->m_nStyle = 0;
Следующие линии проверяют, чтобы увидеть, выбран ли элемент в данный момент и связан ли элемент в документ или внедряется в нем. Маркеры изменения размеров, расположенные на внутри границы добавляются на стиль, что элемент выбран. Если элемент привязывается к документу, предоставленный точки используется стиль границы. Сплошная граница используется, если элемент вставлен.
// setup resize handles if item is selected
if (pItem == m_pSelection)
pTracker->m_nStyle |= CRectTracker::resizeInside;
// put correct border depending on item type
if (pItem->GetType() == OT_LINK)
pTracker->m_nStyle |= CRectTracker::dottedLine;
else
pTracker->m_nStyle |= CRectTracker::solidLine;
Следующий код располагается поверх элемента с насиженным шаблоном, если элемент в настоящий момент открыт.
// put hatching over the item if it is currently open
if (pItem->GetItemState() == COleClientItem::openState ||
pItem->GetItemState() == COleClientItem::activeUIState)
{
pTracker->m_nStyle |= CRectTracker::hatchInside;
}
Затем можно вызвать данную функцию, если средство отслеживания должен быть открыт. Например, вызовите эту функцию из функции OnDraw класса представления. Это обновляет внешний вид отслежывателя при представлении обновляется. Полный пример см. на функцию CMainView::OnDraw образца OCLIENT MFC OLE.
В приложении, события, требующие код отслежывателя (например, изменение, перемещение и проверка обнаружение, происходят. Эти действия показывают, что обычно делается попытка захватить или перемещение элемента. В этих случаях необходимо решить, что было захвачено: маркер изменения размера или часть границу между маркеров изменения размера. Обработчик сообщений OnLButtonDown рекомендуется начать ознакомление с раздела для выполнения положение указателя мыши по сравнению с элементом. Вызывать в CRectTracker::HitTest. Если тест возвращает что-то, кроме CRectTracker::hitOutside, изменения или удаления элемента. Поэтому необходимо выполнять в функцию-член Track. См. функцию CMainView::OnLButtonDown, расположенную в примере MFC OCLIENT OLE полный пример.
Класс CRectTracker предоставляет несколько различных фигур курсора, используемых для отображения изменения ли перемещать их, или выполняется операция перетаскивания. Обработка этого события, установите флажок для просмотра, выбран ли элемент в данный момент под указателем мыши. Если это так, то вызывать в CRectTracker::SetCursor, или вызвать обработчика по умолчанию. В следующем примере из образца OCLIENT MFC OLE:
BOOL CMainView::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
if (pWnd == this && m_pSelection != NULL)
{
// give the tracker for the selection a chance
CRectTracker tracker;
SetupTracker(&tracker, m_pSelection);
if (tracker.SetCursor(this, nHitTest))
return TRUE;
}
return CScrollView::OnSetCursor(pWnd, nHitTest, message);
}
См. также
Основные понятия
Средства отслеживания. Реализация средств отслеживания в приложении OLE