Класс CRectTracker

Позволяет отображать, перемещать и изменять размер элемента различными способами.

Синтаксис

class CRectTracker

Участники

Открытые конструкторы

Имя Описание
CRectTracker::CRectTracker Формирует объект CRectTracker.

Открытые методы

Имя Описание
CRectTracker::AdjustRect Вызывается при изменении размера прямоугольника.
CRectTracker::D raw Отрисовывает прямоугольник.
CRectTracker::D rawTrackerRect Вызывается при рисовании границы CRectTracker объекта.
CRectTracker::GetHandleMask Вызывается для получения маски CRectTracker дескрипторов изменения размера элемента.
CRectTracker::GetTrueRect Возвращает ширину и высоту прямоугольника, включая дескриптор изменения размера.
CRectTracker::HitTest Возвращает текущую позицию курсора, связанного CRectTracker с объектом.
CRectTracker::NormalizeHit Нормализует код хит-теста.
CRectTracker::OnChangedRect Вызывается при изменении размера прямоугольника или перемещении.
CRectTracker::SetCursor Задает курсор в зависимости от его положения над прямоугольником.
CRectTracker::Track Позволяет пользователю управлять прямоугольником.
CRectTracker::TrackRubberBand Позволяет пользователю "резиновая полоса" выбрать.

Открытые члены данных

Имя Описание
CRectTracker::m_nHandleSize Определяет размер дескрипторов изменения размера.
CRectTracker::m_nStyle Текущие стили трекера.
CRectTracker::m_rect Текущее положение (в пикселях) прямоугольника.
CRectTracker::m_sizeMin Определяет минимальную ширину прямоугольника и высоту.

Замечания

CRectTracker не имеет базового класса.

CRectTracker Хотя класс предназначен для взаимодействия пользователя с элементами OLE с помощью графического интерфейса, его использование не ограничивается приложениями с поддержкой OLE. Его можно использовать в любом месте, где требуется пользовательский интерфейс.

CRectTracker границы могут быть сплошными или пунктирными линиями. Элемент может быть предоставлен люковой границы или наложен с люком шаблона, чтобы указать различные состояния элемента. Вы можете разместить восемь дескрипторов изменения размера на внешней или внутренней границе элемента. (Описание дескрипторов изменения размера см. в разделе GetHandleMask.) Наконец, можно CRectTracker изменить ориентацию элемента во время изменения размера.

Чтобы использовать CRectTracker, создайте CRectTracker объект и укажите, какие состояния отображения инициализированы. Затем этот интерфейс можно использовать для предоставления пользовательскому визуальному отзыву о текущем состоянии элемента OLE, связанного с CRectTracker объектом.

Дополнительные сведения об использовании CRectTrackerсм. в статье Trackers.

Иерархия наследования

CRectTracker

Требования

Заголовок: afxext.h

CRectTracker::AdjustRect

Вызывается платформой при изменении размера прямоугольника отслеживания с помощью дескриптора изменения размера.

virtual void AdjustRect(
    int nHandle,
    LPRECT lpRect);

Параметры

nHandle
Индекс используемого дескриптора.

lpRect
Указатель на текущий размер прямоугольника. (Размер прямоугольника определяется его высотой и шириной.)

Замечания

Поведение по умолчанию этой функции позволяет прямоугольнику изменяться только в том случае, если Track и TrackRubberBand вызывается с разрешенным инвертированием.

Переопределите эту функцию, чтобы управлять настройкой прямоугольника отслеживания во время операции перетаскивания. Один из методов — настроить координаты, указанные lpRect перед возвратом.

Специальные функции, которые не поддерживаются CRectTrackerнапрямую, например привязка к сетке или пропорции хранения, могут быть реализованы путем переопределения этой функции.

CRectTracker::CRectTracker

Создает и инициализирует CRectTracker объект.

CRectTracker();

CRectTracker(
    LPCRECT lpSrcRect,
    UINT nStyle);

Параметры

lpSrcRect
Координаты объекта прямоугольника.

nStyle
Задает стиль CRectTracker объекта. Поддерживаются следующие стили:

  • CRectTracker::solidLine Используйте сплошную линию для границы прямоугольника.

  • CRectTracker::dottedLine Используйте пунктирную линию для границы прямоугольника.

  • CRectTracker::hatchedBorder Используйте вылупленный шаблон для границы прямоугольника.

  • CRectTracker::resizeInside Изменение размера дескрипторов, расположенных внутри прямоугольника.

  • CRectTracker::resizeOutside Изменение размера дескрипторов, расположенных за пределами прямоугольника.

  • CRectTracker::hatchInside Хэтчированные шаблоны охватывают весь прямоугольник.

Замечания

Конструктор по умолчанию инициализирует CRectTracker объект со значениями из lpSrcRect и инициализирует другие размеры в системные значения по умолчанию. Если объект создан без параметров, m_rectm_nStyle члены данных не инициализируются.

CRectTracker::D raw

Вызовите эту функцию для рисования внешних линий прямоугольника и внутреннего региона.

void Draw(CDC* pDC) const;

Параметры

pDC
Указатель на контекст устройства, на который следует нарисовать.

Замечания

Стиль трекера определяет, как выполняется рисование. Дополнительные сведения о доступных стилях см. в конструкторе CRectTracker .

CRectTracker::D rawTrackerRect

Вызывается платформой всякий раз, когда позиция трекера изменилась во время внутри Track функции или TrackRubberBand члена.

virtual void DrawTrackerRect(
    LPCRECT lpRect,
    CWnd* pWndClipTo,
    CDC* pDC,
    CWnd* pWnd);

Параметры

lpRect
Указатель на RECT объект, содержащий прямоугольник для рисования.

pWndClipTo
Указатель на окно, используемое при обрезке прямоугольника.

pDC
Указатель на контекст устройства, на который следует нарисовать.

pWnd
Указатель на окно, в котором будет выполняться рисунок.

Замечания

Реализация по умолчанию вызывает CDC::DrawFocusRectобъект, который рисует пунктирный прямоугольник.

Переопределите эту функцию для предоставления различных отзывов во время операции отслеживания.

CRectTracker::GetHandleMask

Платформа вызывает эту функцию-член, чтобы получить маску для дескрипторов изменения размера прямоугольника.

virtual UINT GetHandleMask() const;

Возвращаемое значение

Маска дескрипторов CRectTracker изменения размера элемента.

Замечания

Маркеры изменения размера отображаются на сторонах и углах прямоугольника и позволяют пользователю управлять фигурой и размером прямоугольника.

Прямоугольник имеет 8 дескрипторов с нумерованным номером 0-7. Каждый дескриптор изменения размера представлен битом в маске; Значение этого бита равно 2^ n, где n — номер дескриптора изменения размера. Биты 0-3 соответствуют угловым дескрипторам изменения размера, начиная с левого верхнего левого перемещения по часовой стрелке. Биты 4-7 соответствуют дескрипторам изменения размера стороны, начиная с верхней движущейся часовой стрелки. На следующем рисунке показаны дескрипторы изменения размера прямоугольника и соответствующие значения дескриптора изменения размера:

Resize handle numbers.

Реализация по умолчанию GetHandleMask возвращает маску битов, чтобы отобразился дескриптор изменения размера. Если один бит включен, будет нарисован соответствующий дескриптор изменения размера.

Переопределите эту функцию-член, чтобы скрыть или показать указанные дескрипторы изменения размера.

CRectTracker::GetTrueRect

Вызовите эту функцию, чтобы получить координаты прямоугольника.

void GetTrueRect(LPRECT lpTrueRect) const;

Параметры

lpTrueRect
Указатель на RECT структуру, содержащую координаты CRectTracker устройства объекта.

Замечания

Размеры прямоугольника включают высоту и ширину любых дескрипторов изменения размера, расположенных на внешней границе. При возвращении lpTrueRect всегда является нормализованным прямоугольником в координатах устройства.

CRectTracker::HitTest

Вызовите эту функцию, чтобы узнать, захватил ли пользователь дескриптор изменения размера.

int HitTest(CPoint point) const;

Параметры

point
Точка в координатах устройства для тестирования.

Возвращаемое значение

Возвращаемое значение основано на перечисленном типе CRectTracker::TrackerHit и может иметь одно из следующих значений:

  • CRectTracker::hitNothing -1

  • CRectTracker::hitTopLeft 0

  • CRectTracker::hitTopRight 1

  • CRectTracker::hitBottomRight 2

  • CRectTracker::hitBottomLeft 3

  • CRectTracker::hitTop 4

  • CRectTracker::hitRight 5

  • CRectTracker::hitBottom 6

  • CRectTracker::hitLeft 7

  • CRectTracker::hitMiddle 8

CRectTracker::m_nHandleSize

Размер в пикселях CRectTracker дескрипторов изменения размера.

int m_nHandleSize;

Замечания

Инициализирован со значением системы по умолчанию.

CRectTracker::m_rect

Текущее положение прямоугольника в координатах клиента (пиксели).

CRect m_rect;

CRectTracker::m_sizeMin

Минимальный размер прямоугольника.

CSize m_sizeMin;

Замечания

Значения по умолчанию и cyвычисляются из системного значения cx по умолчанию для ширины границы. Этот элемент данных используется только функцией-членом AdjustRect .

CRectTracker::m_nStyle

Текущий стиль прямоугольника.

UINT m_nStyle;

Замечания

Список возможных стилей см. в разделе CRectTracker::CRectTracker .

CRectTracker::NormalizeHit

Вызовите эту функцию для преобразования потенциально инвертированного дескриптора.

int NormalizeHit(int nHandle) const;

Параметры

nHandle
Обработка, выбранная пользователем.

Возвращаемое значение

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

Замечания

Если CRectTracker::Track или CRectTracker::TrackRubberBand вызывается с разрешенным инвертированием, прямоугольник может быть инвертирован на оси X, оси Y или обоих. В этом случае возвращаются дескрипторы, HitTest которые также инвертируются в отношении прямоугольника. Это не подходит для обратной связи с курсором, так как обратная связь зависит от положения прямоугольника, а не части структуры данных прямоугольника, которая будет изменена.

CRectTracker::OnChangedRect

Вызывается платформой всякий раз, когда прямоугольник трекера изменился во время вызова Track.

virtual void OnChangedRect(const CRect& rectOld);

Параметры

rectOld
Содержит старые координаты CRectTracker устройства объекта.

Замечания

В то время, когда эта функция вызывается, все отзывы, нарисованные с DrawTrackerRect ним, были удалены. Реализация по умолчанию этой функции не выполняет никаких действий.

Переопределите эту функцию, если вы хотите выполнить какие-либо действия после изменения размера прямоугольника.

CRectTracker::SetCursor

Вызовите эту функцию, чтобы изменить фигуру курсора, пока она находится над CRectTracker областью объекта.

BOOL SetCursor(
    CWnd* pWnd,
    UINT nHitTest) const;

Параметры

pWnd
Указывает на окно, содержащее курсор.

nHitTest
Результаты предыдущего теста попадания из сообщения WM_SETCURSOR.

Возвращаемое значение

Ненулевое значение, если предыдущий хит был над прямоугольником трекера; в противном случае — 0.

Замечания

Вызовите эту функцию внутри функции окна, обрабатывающей сообщение WM_SETCURSOR (обычно OnSetCursor).

CRectTracker::Track

Вызовите эту функцию, чтобы отобразить пользовательский интерфейс для изменения размера прямоугольника.

BOOL Track(
    CWnd* pWnd,
    CPoint point,
    BOOL bAllowInvert = FALSE,
    CWnd* pWndClipTo = NULL);

Параметры

pWnd
Объект окна, содержащий прямоугольник.

point
Координаты устройства текущей позиции мыши относительно клиентской области.

bAllowInvert
Если значение TRUE, прямоугольник может быть перевернут вдоль оси X или оси Y; в противном случае ЗНАЧЕНИЕ FALSE.

pWndClipTo
Окно, к которому будут обрезаться операции рисования. Если значение NULL, pWnd используется в качестве прямоугольника обрезки.

Возвращаемое значение

Если клавишу ESC нажимается, процесс отслеживания останавливается, прямоугольник, хранящийся в трекере, не изменяется и возвращается значение 0. Если изменение зафиксировано, переместив мышь и выпустив левую кнопку мыши, возвращается новая позиция и (или) размер в прямоугольнике трекера и ненулевом.

Замечания

Обычно это вызывается из-за функции приложения, обрабатывающего WM_LBUTTONDOWN сообщение (обычно OnLButtonDown).

Эта функция будет записывать мышь, пока пользователь не выпустит левую кнопку мыши, нажимает клавишу ESC или нажимает правую кнопку мыши. При перемещении курсора мыши обратная связь обновляется путем вызова DrawTrackerRect и OnChangedRect.

Если bAllowInvert имеет значение TRUE, прямоугольник отслеживания может быть инвертирован на оси x или Y.

CRectTracker::TrackRubberBand

Вызовите эту функцию для выбора резиновой полосы.

BOOL TrackRubberBand(
    CWnd* pWnd,
    CPoint point,
    BOOL bAllowInvert = TRUE);

Параметры

pWnd
Объект окна, содержащий прямоугольник.

point
Координаты устройства текущей позиции мыши относительно клиентской области.

bAllowInvert
Если значение TRUE, прямоугольник может быть перевернут вдоль оси X или оси Y; в противном случае ЗНАЧЕНИЕ FALSE.

Возвращаемое значение

Ненулевое значение, если мышь перемещена и прямоугольник не пуст; в противном случае — 0.

Замечания

Обычно он вызывается из-за функции приложения, обрабатывающего сообщение WM_LBUTTONDOWN (обычно OnLButtonDown).

Эта функция будет записывать мышь, пока пользователь не выпустит левую кнопку мыши, нажимает клавишу ESC или нажимает правую кнопку мыши. При перемещении курсора мыши обратная связь обновляется путем вызова DrawTrackerRect и OnChangedRect.

Отслеживание выполняется с выбором типа резиновой полосы с правой нижней ручкой. Если разрешено инвертирование, прямоугольник может быть размером, перетаскивая вверх и влево или вниз и вправо.

См. также

Пример ОТСЛЕЖИВАНИЯ MFC
Пример DRAWCLI MFC
Диаграмма иерархии
Класс COleResizeBar
Класс CRect