Класс 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_rect
m_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 соответствуют дескрипторам изменения размера стороны, начиная с верхней движущейся часовой стрелки. На следующем рисунке показаны дескрипторы изменения размера прямоугольника и соответствующие значения дескриптора изменения размера:
Реализация по умолчанию GetHandleMask
возвращает маску битов, чтобы отобразился дескриптор изменения размера. Если один бит включен, будет нарисован соответствующий дескриптор изменения размера.
Переопределите эту функцию-член, чтобы скрыть или показать указанные дескрипторы изменения размера.
CRectTracker::GetTrueRect
Вызовите эту функцию, чтобы получить координаты прямоугольника.
void GetTrueRect(LPRECT lpTrueRect) const;
Параметры
lpTrueRect
Указатель на RECT
структуру, содержащую координаты CRectTracker
устройства объекта.
Замечания
Размеры прямоугольника включают высоту и ширину любых дескрипторов изменения размера, расположенных на внешней границе. При возвращении lpTrueRect всегда является нормализованным прямоугольником в координатах устройства.
CRectTracker::HitTest
Вызовите эту функцию, чтобы узнать, захватил ли пользователь дескриптор изменения размера.
int HitTest(CPoint point) const;
Параметры
point
Точка в координатах устройства для тестирования.
Возвращаемое значение
Возвращаемое значение основано на перечисленном типе CRectTracker::TrackerHit
и может иметь одно из следующих значений:
CRectTracker::hitNothing
-1CRectTracker::hitTopLeft
0CRectTracker::hitTopRight
1CRectTracker::hitBottomRight
2CRectTracker::hitBottomLeft
3CRectTracker::hitTop
4CRectTracker::hitRight
5CRectTracker::hitBottom
6CRectTracker::hitLeft
7CRectTracker::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