Condividi tramite


Classe CRectTracker

Consente di visualizzare, spostare e ridimensionare un elemento in modi diversi.

Sintassi

class CRectTracker

Membri

Costruttori pubblici

Nome Descrizione
CRectTracker::CRectTracker Costruisce un oggetto CRectTracker.

Metodi pubblici

Nome Descrizione
CRectTracker::AdjustRect Chiamato quando il rettangolo viene ridimensionato.
CRectTracker::D raw Esegue il rendering del rettangolo.
CRectTracker::D rawTrackerRect Chiamato quando si disegna il bordo di un CRectTracker oggetto .
CRectTracker::GetHandleMask Chiamato per ottenere la maschera degli handle di ridimensionamento di un CRectTracker elemento.
CRectTracker::GetTrueRect Restituisce la larghezza e l'altezza del rettangolo, inclusi i quadratini di ridimensionamento.
CRectTracker::HitTest Restituisce la posizione corrente del cursore correlato all'oggetto CRectTracker .
CRectTracker::NormalizeHit Normalizza un codice di hit test.
CRectTracker::OnChangedRectRect Chiamato quando il rettangolo è stato ridimensionato o spostato.
CRectTracker::SetCursor Imposta il cursore, a seconda della posizione sul rettangolo.
CRectTracker::Track Consente all'utente di modificare il rettangolo.
CRectTracker::TrackRubberBand Consente all'utente di "banda di gomma" la selezione.

Membri dati pubblici

Nome Descrizione
CRectTracker::m_nHandleSize Determina le dimensioni degli handle di ridimensionamento.
CRectTracker::m_nStyle Stili correnti del tracciatore.
CRectTracker::m_rect Posizione corrente (in pixel) del rettangolo.
CRectTracker::m_sizeMin Determina la larghezza e l'altezza minime del rettangolo.

Osservazioni:

CRectTracker non dispone di una classe di base.

Anche se la CRectTracker classe è progettata per consentire all'utente di interagire con gli elementi OLE tramite un'interfaccia grafica, il relativo utilizzo non è limitato alle applicazioni abilitate per OLE. Può essere usato ovunque sia necessaria un'interfaccia utente di questo tipo.

CRectTracker i bordi possono essere linee a tinta unita o tratteggiata. All'elemento può essere assegnato un bordo tratteggio o sovrapposto con un motivo tratteggio per indicare stati diversi dell'elemento. È possibile posizionare otto quadratini di ridimensionamento sull'esterno o sul bordo interno dell'elemento. Per una spiegazione degli handle di ridimensionamento, vedere GetHandleMask. Infine, un oggetto CRectTracker consente di modificare l'orientamento di un elemento durante il ridimensionamento.

Per usare CRectTracker, costruire un CRectTracker oggetto e specificare gli stati di visualizzazione inizializzati. È quindi possibile usare questa interfaccia per fornire all'utente un feedback visivo sullo stato corrente dell'elemento OLE associato all'oggetto CRectTracker .

Per altre informazioni sull'uso CRectTrackerdi , vedere l'articolo Tracker.

Gerarchia di ereditarietà

CRectTracker

Requisiti

Intestazione: afxext.h

CRectTracker::AdjustRect

Chiamato dal framework quando il rettangolo di rilevamento viene ridimensionato usando un handle di ridimensionamento.

virtual void AdjustRect(
    int nHandle,
    LPRECT lpRect);

Parametri

nHandle
Indice dell'handle utilizzato.

lpRect
Puntatore alla dimensione corrente del rettangolo. Le dimensioni di un rettangolo sono date in base all'altezza e alla larghezza.

Osservazioni:

Il comportamento predefinito di questa funzione consente di modificare l'orientamento del rettangolo solo quando Track e TrackRubberBand vengono chiamati con l'inversione consentita.

Eseguire l'override di questa funzione per controllare la regolazione del rettangolo di rilevamento durante un'operazione di trascinamento. Un metodo consiste nel regolare le coordinate specificate da lpRect prima della restituzione.

È possibile implementare funzionalità speciali non supportate direttamente da CRectTracker, ad esempio snap-to-grid o keep-aspect-ratio, eseguendo l'override di questa funzione.

CRectTracker::CRectTracker

Crea e inizializza un CRectTracker oggetto .

CRectTracker();

CRectTracker(
    LPCRECT lpSrcRect,
    UINT nStyle);

Parametri

lpSrcRect
Coordinate dell'oggetto rettangolo.

nStyle
Specifica lo stile dell'oggetto CRectTracker . Sono supportati gli stili seguenti:

  • CRectTracker::solidLine Usare una linea continua per il bordo del rettangolo.

  • CRectTracker::dottedLine Utilizzare una linea tratteggiata per il bordo del rettangolo.

  • CRectTracker::hatchedBorder Utilizzare un motivo tratteggio per il bordo rettangolo.

  • CRectTracker::resizeInside Ridimensiona gli handle che si trovano all'interno del rettangolo.

  • CRectTracker::resizeOutside Ridimensiona gli handle che si trovano all'esterno del rettangolo.

  • CRectTracker::hatchInside Motivo tratteggio copre l'intero rettangolo.

Osservazioni:

Il costruttore predefinito inizializza l'oggetto CRectTracker con i valori di lpSrcRect e inizializza le altre dimensioni alle impostazioni predefinite di sistema. Se l'oggetto viene creato senza parametri, i m_rect membri dati e m_nStyle non vengono inizializzati.

CRectTracker::D raw

Chiamare questa funzione per disegnare le linee esterne del rettangolo e l'area interna.

void Draw(CDC* pDC) const;

Parametri

pDC
Puntatore al contesto del dispositivo in cui disegnare.

Osservazioni:

Lo stile del tracciatore determina come viene eseguito il disegno. Per altre informazioni sugli stili disponibili, vedere il costruttore CRectTracker .

CRectTracker::D rawTrackerRect

Chiamato dal framework ogni volta che la posizione del tracker è cambiata all'interno della Track funzione membro o TrackRubberBand .

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

Parametri

lpRect
Puntatore all'oggetto RECT contenente il rettangolo da disegnare.

pWndClipTo
Puntatore alla finestra da usare per ritagliare il rettangolo.

pDC
Puntatore al contesto del dispositivo in cui disegnare.

pWnd
Puntatore alla finestra in cui verrà eseguito il disegno.

Osservazioni:

L'implementazione predefinita esegue una chiamata a CDC::DrawFocusRect, che disegna un rettangolo punteggiato.

Eseguire l'override di questa funzione per fornire commenti e suggerimenti diversi durante l'operazione di rilevamento.

CRectTracker::GetHandleMask

Il framework chiama questa funzione membro per recuperare la maschera per gli handle di ridimensionamento di un rettangolo.

virtual UINT GetHandleMask() const;

Valore restituito

Maschera degli handle di ridimensionamento di un CRectTracker elemento.

Osservazioni:

I quadratini di ridimensionamento vengono visualizzati sui lati e sugli angoli del rettangolo e consentono all'utente di controllare la forma e le dimensioni del rettangolo.

Un rettangolo ha 8 handle di ridimensionamento numerati da 0 a 7. Ogni handle di ridimensionamento è rappresentato da un po' nella maschera; il valore di tale bit è 2^ n, dove n è il numero di handle di ridimensionamento. I bit 0-3 corrispondono ai quadratini di ridimensionamento dell'angolo, a partire dall'angolo superiore sinistro in senso orario. I bit da 4 a 7 corrispondono ai quadratini di ridimensionamento laterale a partire dalla parte superiore in senso orario. La figura seguente mostra i quadratini di ridimensionamento di un rettangolo e i relativi valori e numeri di handle di ridimensionamento corrispondenti:

Ridimensionare i numeri di handle.

L'implementazione predefinita di GetHandleMask restituisce la maschera dei bit in modo che vengano visualizzati gli handle di ridimensionamento. Se il singolo bit è attivo, verrà disegnato l'handle di ridimensionamento corrispondente.

Eseguire l'override di questa funzione membro per nascondere o visualizzare gli handle di ridimensionamento indicati.

CRectTracker::GetTrueRect

Chiamare questa funzione per recuperare le coordinate del rettangolo.

void GetTrueRect(LPRECT lpTrueRect) const;

Parametri

lpTrueRect
Puntatore alla RECT struttura che conterrà le coordinate del dispositivo dell'oggetto CRectTracker .

Osservazioni:

Le dimensioni del rettangolo includono l'altezza e la larghezza di eventuali quadratini di ridimensionamento posizionati sul bordo esterno. Al momento della restituzione, lpTrueRect è sempre un rettangolo normalizzato nelle coordinate del dispositivo.

CRectTracker::HitTest

Chiamare questa funzione per scoprire se l'utente ha afferrato un handle di ridimensionamento.

int HitTest(CPoint point) const;

Parametri

point
Punto, nelle coordinate del dispositivo, da testare.

Valore restituito

Il valore restituito è basato sul tipo CRectTracker::TrackerHit enumerato e può avere uno dei valori seguenti:

  • 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

Dimensioni, in pixel, degli handle di CRectTracker ridimensionamento.

int m_nHandleSize;

Osservazioni:

Inizializzato con il valore di sistema predefinito.

CRectTracker::m_rect

Posizione corrente del rettangolo nelle coordinate client (pixel).

CRect m_rect;

CRectTracker::m_sizeMin

Dimensione minima del rettangolo.

CSize m_sizeMin;

Osservazioni:

Entrambi i valori predefiniti e cx cy, vengono calcolati dal valore di sistema predefinito per la larghezza del bordo. Questo membro dati viene utilizzato solo dalla AdjustRect funzione membro.

CRectTracker::m_nStyle

Stile corrente del rettangolo.

UINT m_nStyle;

Osservazioni:

Per un elenco di possibili stili, vedere CRectTracker::CRectTracker .

CRectTracker::NormalizeHit

Chiamare questa funzione per convertire un handle potenzialmente invertito.

int NormalizeHit(int nHandle) const;

Parametri

nHandle
Handle selezionato dall'utente.

Valore restituito

Indice dell'handle normalizzato.

Osservazioni:

Quando CRectTracker::Track o CRectTracker::TrackRubberBand viene chiamato con inversione consentita, è possibile che il rettangolo venga invertito sull'asse x, sull'asse y o su entrambi. In questo caso, HitTest restituirà handle che vengono invertiti anche rispetto al rettangolo. Ciò non è appropriato per il feedback del cursore di disegno perché il feedback dipende dalla posizione dello schermo del rettangolo, non dalla parte della struttura di dati del rettangolo che verrà modificata.

CRectTracker::OnChangedRectRect

Chiamato dal framework ogni volta che il rettangolo di rilevamento è cambiato durante una chiamata a Track.

virtual void OnChangedRect(const CRect& rectOld);

Parametri

rectOld
Contiene le coordinate del dispositivo precedenti dell'oggetto CRectTracker .

Osservazioni:

Al momento della chiamata di questa funzione, tutti i feedback estratti con DrawTrackerRect sono stati rimossi. L'implementazione predefinita di questa funzione non esegue alcuna operazione.

Eseguire l'override di questa funzione quando si desidera eseguire qualsiasi azione dopo il ridimensionamento del rettangolo.

CRectTracker::SetCursor

Chiamare questa funzione per modificare la forma del cursore mentre si trova sull'area CRectTracker dell'oggetto.

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

Parametri

pWnd
Punta alla finestra che contiene attualmente il cursore.

nHitTest
Risultati dell'hit test precedente, dal messaggio WM_SETCURSOR.

Valore restituito

Diverso da zero se l'hit precedente è stato superato il rettangolo di rilevamento; in caso contrario, 0.

Osservazioni:

Chiamare questa funzione dall'interno della funzione della finestra che gestisce il messaggio WM_SETCURSOR (in OnSetCursorgenere ).

CRectTracker::Track

Chiamare questa funzione per visualizzare l'interfaccia utente per ridimensionare il rettangolo.

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

Parametri

pWnd
Oggetto finestra contenente il rettangolo.

point
Coordinate del dispositivo della posizione corrente del mouse rispetto all'area client.

bAllowInvert
Se TRUE, il rettangolo può essere invertito lungo l'asse x o l'asse y; in caso contrario FALSE.

pWndClipTo
Finestra in cui verranno ritagliate le operazioni di disegno. Se NULL, pWnd viene usato come rettangolo di ritaglio.

Valore restituito

Se il tasto ESC viene premuto, il processo di rilevamento viene interrotto, il rettangolo archiviato nel tracciatore non viene modificato e viene restituito 0. Se viene eseguito il commit della modifica, spostando il mouse e rilasciando il pulsante sinistro del mouse, la nuova posizione e/o dimensione viene registrata nel rettangolo del tracker e viene restituito un valore diverso da zero.

Osservazioni:

Questo viene in genere chiamato dall'interno della funzione dell'applicazione che gestisce il WM_LBUTTONDOWN messaggio (in OnLButtonDowngenere ).

Questa funzione acquisisce il mouse finché l'utente non rilascia il pulsante sinistro del mouse, preme ESC o preme il pulsante destro del mouse. Quando l'utente sposta il cursore del mouse, il feedback viene aggiornato chiamando DrawTrackerRect e OnChangedRect.

Se bAllowInvert è TRUE, il rettangolo di rilevamento può essere invertito sull'asse x o sull'asse y.

CRectTracker::TrackRubberBand

Chiamare questa funzione per eseguire la selezione della banda di gomma.

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

Parametri

pWnd
Oggetto finestra contenente il rettangolo.

point
Coordinate del dispositivo della posizione corrente del mouse rispetto all'area client.

bAllowInvert
Se TRUE, il rettangolo può essere invertito lungo l'asse x o l'asse y; in caso contrario FALSE.

Valore restituito

Diverso da zero se il mouse è stato spostato e il rettangolo non è vuoto; in caso contrario, 0.

Osservazioni:

Viene in genere chiamato dall'interno della funzione dell'applicazione che gestisce il messaggio WM_LBUTTONDOWN (in OnLButtonDowngenere ).

Questa funzione acquisisce il mouse finché l'utente non rilascia il pulsante sinistro del mouse, preme ESC o preme il pulsante destro del mouse. Quando l'utente sposta il cursore del mouse, il feedback viene aggiornato chiamando DrawTrackerRect e OnChangedRect.

Il tracciamento viene eseguito con una selezione di tipo elastico dal quadratino inferiore destro. Se l'inversione è consentita, il rettangolo può essere ridimensionato trascinando verso l'alto e verso sinistra o verso il basso e verso destra.

Vedi anche

MFC Sample TRACKER
MFC Sample DRAWCLI
Grafico della gerarchia
Classe COleResizeBar
Classe CRect