Classe CRectTracker

Permite que um item seja exibido, movido e redimensionado de diferentes modos.

Sintaxe

class CRectTracker

Membros

Construtores públicos

Nome Descrição
CRectTracker::CRectTracker Constrói um objeto CRectTracker.

Métodos públicos

Nome Descrição
CRectTracker::AdjustRect Chamado quando o retângulo é redimensionado.
CRectTracker::Draw Renderiza o retângulo.
CRectTracker::DrawTrackerRect Chamado ao desenhar a borda de um objeto CRectTracker.
CRectTracker::GetHandleMask Chamado para obter a máscara das alças de redimensionamento de um item CRectTracker.
CRectTracker::GetTrueRect Retorna largura e altura do retângulo, incluindo alças de redimensionamento.
CRectTracker::HitTest Retorna a posição atual do cursor relacionada ao objeto CRectTracker.
CRectTracker::NormalizeHit Normaliza um código de teste de ocorrência.
CRectTracker::OnChangedRect Chamado quando o retângulo foi redimensionado ou movido.
CRectTracker::SetCursor Define o cursor, dependendo de sua posição sobre o retângulo.
CRectTracker::Track Permite que o usuário manipule o retângulo.
CRectTracker::TrackRubberBand Permite que o usuário "estenda" a seleção.

Membros de Dados Públicos

Nome Descrição
CRectTracker::m_nHandleSize Determina o tamanho das alças de redimensionamento.
CRectTracker::m_nStyle Estilos atuais do rastreador.
CRectTracker::m_rect Posição atual (em pixels) do retângulo.
CRectTracker::m_sizeMin Determina a largura e a altura mínimas do retângulo.

Comentários

CRectTracker não tem uma classe base.

Embora a classe CRectTracker tenha sido projetada para permitir que o usuário interaja com itens OLE usando uma interface gráfica, seu uso não é restrito a aplicativos habilitados para OLE. Ele pode ser usado em qualquer lugar em que essa interface do usuário é necessária.

As bordas do CRectTracker podem ser linhas sólidas ou pontilhadas. O item pode receber uma borda hachurada ou sobreposta com um padrão hachurado para indicar estados diferentes do item. Você pode colocar oito alças de redimensionamento na borda externa ou interna do item. (Para uma explicação das alças de redimensionamento, confira GetHandleMask.) Por fim, um CRectTracker permite alterar a orientação de um item durante o redimensionamento.

Para usar CRectTracker, construa um objeto CRectTracker e especifique quais estados de exibição são inicializados. Você então pode usar essa interface para fornecer ao usuário comentários visuais sobre o status atual do item OLE associado ao objeto CRectTracker.

Para mais informações sobre como usar CRectTracker, confira o artigo Rastreadores.

Hierarquia de herança

CRectTracker

Requisitos

Cabeçalho: afxext.h

CRectTracker::AdjustRect

Chamado pela estrutura quando o retângulo de acompanhamento é redimensionado usando uma alça de redimensionamento.

virtual void AdjustRect(
    int nHandle,
    LPRECT lpRect);

Parâmetros

nHandle
Índice da alça usada.

lpRect
Ponteiro para o tamanho atual do retângulo. (O tamanho de um retângulo é dado por sua altura e largura.)

Comentários

O comportamento padrão dessa função permite que a orientação do retângulo seja alterada somente quando Track e TrackRubberBand são chamados com inversão permitida.

Substitua essa função para controlar o ajuste do retângulo de acompanhamento durante uma operação de arrastar. Um método é ajustar as coordenadas especificadas pelo lpRect antes de retornar.

Recursos especiais que não têm suporte direto por CRectTracker, como encaixar na grade ou manter proporção, podem ser implementados substituindo essa função.

CRectTracker::CRectTracker

Cria e inicializa um objeto CRectTracker.

CRectTracker();

CRectTracker(
    LPCRECT lpSrcRect,
    UINT nStyle);

Parâmetros

lpSrcRect
As coordenadas do objeto de retângulo.

nEstilo
Especifica o estilo do objeto CRectTracker. Há suporte para os seguintes estilos:

  • CRectTracker::solidLine Usar uma linha sólida para a borda do retângulo.

  • CRectTracker::dottedLine Usar uma linha pontilhada para a borda do retângulo.

  • CRectTracker::hatchedBorder Usar um padrão eclodido para a borda do retângulo.

  • CRectTracker::resizeInside Alças de redimensionamento localizadas dentro do retângulo.

  • CRectTracker::resizeOutside Alças de redimensionamento localizadas fora do retângulo.

  • CRectTracker::hatchInside O padrão hachurado cobre todo o retângulo.

Comentários

O construtor padrão inicializa o objeto CRectTracker com os valores de lpSrcRect e inicializa outros tamanhos para padrões do sistema. Se o objeto for criado sem parâmetros, os membros de dados m_rect e m_nStyle não serão inicializados.

CRectTracker::Draw

Chame essa função para desenhar as linhas externas e a região interna do retângulo.

void Draw(CDC* pDC) const;

Parâmetros

pDC
Ponteiro para o contexto do dispositivo no qual desenhar.

Comentários

O estilo do rastreador determina como o desenho é feito. Para obter mais informações sobre os estilos disponíveis, confira o construtor para CRectTracker.

CRectTracker::DrawTrackerRect

Chamado pela estrutura sempre que a posição do rastreador tiver sido alterada dentro da função de membro Track ou TrackRubberBand.

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

Parâmetros

lpRect
Ponteiro para o RECT que contém o retângulo a ser desenhado.

pWndClipTo
Ponteiro para a janela a ser usada no recorte do retângulo.

pDC
Ponteiro para o contexto do dispositivo no qual desenhar.

pWnd
Ponteiro para a janela na qual o desenho ocorrerá.

Comentários

A implementação padrão faz uma chamada para CDC::DrawFocusRect, que desenha um retângulo pontilhado.

Substitua essa função para fornecer comentários diferentes durante a operação de acompanhamento.

CRectTracker::GetHandleMask

A estrutura chama essa função de membro para recuperar a máscara para alças de redimensionamento de um retângulo.

virtual UINT GetHandleMask() const;

Valor de retorno

A máscara das alças de redimensionamento de um item CRectTracker.

Comentários

As alças de redimensionamento aparecem nos lados e cantos do retângulo e permitem que o usuário controle a forma e o tamanho do retângulo.

Um retângulo tem oito alças de redimensionamento numeradas de 0 a 7. Cada alça de redimensionamento é representado por um bit na máscara; o valor desse bit é 2^ n, em que n é o número da alça de redimensionamento. Os bits 0-3 correspondem às alças de redimensionamento de canto, começando no canto superior esquerdo e se movendo no sentido horário. Os bits 4-7 correspondem às alças de redimensionamento laterais começando na parte superior e se movendo no sentido horário. A seguinte ilustração mostra as alças de redimensionamento de um retângulo e seus valores e números de alças de redimensionamento correspondentes:

Redimensione os números das alças.

A implementação padrão de GetHandleMask retorna a máscara dos bits para que as alças de redimensionamento apareçam. Se o bit único estiver ativado, a alça de redimensionamento correspondente será desenhada.

Substitua essa função de membro para ocultar ou mostrar as alças de redimensionamento indicadas.

CRectTracker::GetTrueRect

Chame essa função para recuperar as coordenadas do retângulo.

void GetTrueRect(LPRECT lpTrueRect) const;

Parâmetros

lpTrueRect
Ponteiro para a estrutura RECT que conterá as coordenadas do dispositivo do objeto CRectTracker.

Comentários

As dimensões do retângulo incluem a altura e a largura de todas as alças de redimensionamento localizadas na borda externa. Ao retornar, lpTrueRect sempre é um retângulo normalizado nas coordenadas do dispositivo.

CRectTracker::HitTest

Chame essa função para descobrir se o usuário pegou uma alça de redimensionamento.

int HitTest(CPoint point) const;

Parâmetros

point
O ponto, nas coordenadas do dispositivo, para testar.

Valor de retorno

O valor retornado é baseado no tipo enumerado CRectTracker::TrackerHit e pode ter um dos seguintes valores:

  • 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

O tamanho, em pixels, das alças de redimensionamento do CRectTracker.

int m_nHandleSize;

Comentários

Inicializado com o valor padrão do sistema.

CRectTracker::m_rect

A posição atual do retângulo nas coordenadas do cliente (pixels).

CRect m_rect;

CRectTracker::m_sizeMin

O tamanho mínimo do retângulo.

CSize m_sizeMin;

Comentários

Ambos os valores padrão, cx e cy, são calculados com base no valor padrão do sistema para a largura da borda. Esse membro de dados é usado apenas pela função de membro AdjustRect.

CRectTracker::m_nStyle

O estilo atual do retângulo.

UINT m_nStyle;

Comentários

Confira CRectTracker::CRectTracker para uma lista de estilos possíveis.

CRectTracker::NormalizeHit

Chame essa função para converter uma alça potencialmente invertida.

int NormalizeHit(int nHandle) const;

Parâmetros

nHandle
Alça selecionada pelo usuário.

Valor de retorno

O índice da alça normalizada.

Comentários

Quando CRectTracker::Track ou CRectTracker::TrackRubberBand é chamado com a inversão permitida, é possível que o retângulo seja invertido no eixo x, no eixo y ou em ambos. Quando isso acontecer, HitTest retornará alças que também são invertidas em relação ao retângulo. Isso é inapropriado para desenhar comentários de cursor porque os comentários dependem da posição da tela do retângulo, não da parte da estrutura de dados do retângulo que será modificada.

CRectTracker::OnChangedRect

Chamado pela estrutura sempre que o retângulo rastreador foi alterado durante uma chamada para Track.

virtual void OnChangedRect(const CRect& rectOld);

Parâmetros

rectOld
Contém as coordenadas antigas do dispositivo do objeto CRectTracker.

Comentários

No momento em que essa função é chamada, todos os comentários desenhados com DrawTrackerRect foram removidos. A implementação padrão dessa função não faz nada.

Substitua essa função quando você quiser executar qualquer ação depois que o retângulo for redimensionado.

CRectTracker::SetCursor

Chame essa função para alterar a forma do cursor enquanto ela estiver sobre a região CRectTracker do objeto.

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

Parâmetros

pWnd
Aponta para a janela que atualmente contém o cursor.

nHitTest
Resultados do teste de clique anterior, da mensagem WM_SETCURSOR.

Valor de retorno

Não zero se o clique anterior foi sobre o retângulo rastreador; caso contrário, 0.

Comentários

Chame essa função de dentro da função da janela que manipula a mensagem WM_SETCURSOR (normalmente OnSetCursor).

CRectTracker::Track

Chame essa função para exibir a interface do usuário para redimensionar o retângulo.

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

Parâmetros

pWnd
O objeto de janela que contém o retângulo.

point
Coordenadas do dispositivo da posição atual do mouse em relação à área de cliente.

bAllowInvert
Se TRUE, o retângulo poderá ser invertido ao longo do eixo x ou do eixo y; caso contrário, FALSE.

pWndClipTo
A janela na qual as operações de desenho serão cortadas. Se NULL, pWnd será usado como retângulo de recorte.

Valor de retorno

Se a tecla ESC for pressionada, o processo de acompanhamento será interrompido, o retângulo armazenado no rastreador não será alterado e 0 será retornado. Se a alteração for confirmada, movendo o mouse e liberando o botão esquerdo do mouse, a nova posição e/ou tamanho será registrado no retângulo do rastreador e o não zero será retornado.

Comentários

Isso geralmente é chamado de dentro da função do aplicativo que manipula a mensagem WM_LBUTTONDOWN (normalmente OnLButtonDown).

Essa função capturará o mouse até que o usuário libere o botão esquerdo do mouse, pressione a tecla ESC ou pressione o botão direito do mouse. À medida que o usuário move o cursor do mouse, os comentários são atualizados chamando DrawTrackerRect e OnChangedRect.

Se bAllowInvert for TRUE, o retângulo de acompanhamento poderá ser invertido no eixo x ou eixo y.

CRectTracker::TrackRubberBand

Chame essa função para fazer a seleção de elástico.

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

Parâmetros

pWnd
O objeto de janela que contém o retângulo.

point
Coordenadas do dispositivo da posição atual do mouse em relação à área de cliente.

bAllowInvert
Se TRUE, o retângulo poderá ser invertido ao longo do eixo x ou do eixo y; caso contrário, FALSE.

Valor de retorno

Não zero se o mouse tiver se movido e o retângulo não estiver vazio; caso contrário, 0.

Comentários

Geralmente, é chamado de dentro da função do aplicativo que manipula a mensagem WM_LBUTTONDOWN (normalmente OnLButtonDown).

Essa função capturará o mouse até que o usuário libere o botão esquerdo do mouse, pressione a tecla ESC ou pressione o botão direito do mouse. À medida que o usuário move o cursor do mouse, os comentários são atualizados chamando DrawTrackerRect e OnChangedRect.

O acompanhamento é executado com uma seleção de tipo de elástico da alça inferior direita. Se a inversão for permitida, o retângulo poderá ser dimensionado arrastando-o para cima e para a esquerda ou para baixo e para a direita.

Confira também

RASTREADOR de exemplo MFC
DRAWCLI de exemplo do MFC
Gráfico da hierarquia
Classe COleResizeBar
Classe CRect