Condividi tramite


Classe CEditView

Tipo di classe di visualizzazione che fornisce la funzionalità di un controllo di modifica di Windows e che può essere utilizzato per implementare funzionalità di tipo editor di testo semplice.

Sintassi

class CEditView : public CCtrlView

Membri

Costruttori pubblici

Nome Descrizione
CEditView::CEditView Costruisce un oggetto di tipo CEditView.

Metodi pubblici

Nome Descrizione
CEditView::FindText Cerca una stringa all'interno del testo.
CEditView::GetBufferLength Ottiene la lunghezza del buffer di caratteri.
CEditView::GetEditCtrl Fornisce l'accesso CEdit alla parte di un CEditView oggetto (controllo di modifica di Windows).
CEditView::GetPrinterFont Recupera il tipo di carattere della stampante corrente.
CEditView::GetSelectedText Recupera la selezione del testo corrente.
CEditView::LockBuffer Blocca il buffer.
CEditView::P rintInsideRect Esegue il rendering del testo all'interno di un determinato rettangolo.
CEditView::SerializeRaw Serializza un CEditView oggetto su disco come testo non elaborato.
CEditView::SetPrinterFont Imposta un nuovo tipo di carattere della stampante.
CEditView::SetTabStops Imposta tabulazioni sia per la visualizzazione dello schermo che per la stampa.
CEditView::UnlockBuffer Sblocca il buffer.

Metodi protetti

Nome Descrizione
CEditView::OnFindNext Trova l'occorrenza successiva di una stringa di testo.
CEditView::OnReplaceAll Sostituisce tutte le occorrenze di una determinata stringa con una nuova stringa.
CEditView::OnReplaceSel Sostituisce la selezione corrente.
CEditView::OnTextNotFound Chiamato quando un'operazione di ricerca non corrisponde a un altro testo.

Membri dati pubblici

Nome Descrizione
CEditView::d wStyleDefault Stile predefinito per gli oggetti di tipo CEditView.

Osservazioni:

La CEditView classe fornisce le funzioni aggiuntive seguenti:

  • Stampa.

  • Trovare e sostituire.

Poiché la classe CEditView è una derivata della classe CView, gli oggetti della classe CEditView possono essere usati con documenti e modelli di documento.

Il testo di ogni CEditView controllo viene mantenuto nel proprio oggetto memoria globale. L'applicazione può avere un numero qualsiasi di CEditView oggetti.

Creare oggetti di tipo CEditView se si desidera una finestra di modifica con la funzionalità aggiunta elencata in precedenza o se si desidera una semplice funzionalità dell'editor di testo. Un CEditView oggetto può occupare l'intera area client di una finestra. Derivare le proprie classi da CEditView per aggiungere o modificare la funzionalità di base o per dichiarare classi che possono essere aggiunte a un modello di documento.

L'implementazione predefinita della classe CEditView gestisce i comandi seguenti: ID_EDIT_SELECT_ALL, ID_EDIT_FIND, ID_EDIT_REPLACE, ID_EDIT_REPEAT e ID_FILE_PRINT.

Il limite di caratteri predefinito per CEditView è (1024 * 1024 - 1 = 1048575). Questa operazione può essere modificata chiamando la funzione EM_LIMITTEXT del controllo di modifica sottostante. Tuttavia, i limiti sono diversi a seconda del sistema operativo e del tipo di controllo di modifica (singola o multilinea). Per altre informazioni su questi limiti, vedere EM_LIMITTEXT.

Per modificare questo limite nel controllo, eseguire l'override della funzione per la OnCreate() CEditView classe e inserire la riga di codice seguente:

GetEditCtrl().SetLimitText(nNewVal); //nNewVal, the new character limit

Gli oggetti di tipo CEditView (o di tipi derivati da CEditView) presentano le limitazioni seguenti:

  • CEditView non implementa il vero ciò che vedete è quello che si ottiene (WYSIWYG) di modifica. Dove esiste una scelta tra leggibilità sullo schermo e output stampato corrispondente, CEditView opta per la leggibilità dello schermo.

  • CEditView può visualizzare testo in un solo tipo di carattere. Non è supportata alcuna formattazione di caratteri speciale. Per altre funzionalità, vedere classe CRichEditView .

  • La quantità di testo che può CEditView contenere è limitata. I limiti sono uguali a per il CEdit controllo .

Per altre informazioni su CEditView, vedere Classi di viste derivate disponibili in MFC.

Gerarchia di ereditarietà

CObject

CCmdTarget

CWnd

CView

CCtrlView

CEditView

Requisiti

Intestazione: afxext.h

CEditView::CEditView

Costruisce un oggetto di tipo CEditView.

CEditView();

Osservazioni:

Dopo aver costruito l'oggetto, è necessario chiamare la funzione CWnd::Create prima che venga usato il controllo di modifica. Se si deriva una classe da CEditView e la si aggiunge al modello usando CWinApp::AddDocTemplate, il framework chiama sia questo costruttore che la Create funzione .

CEditView::d wStyleDefault

Contiene lo stile predefinito dell'oggetto CEditView .

static const DWORD dwStyleDefault;

Osservazioni:

Passare questo membro statico come parametro dwStyle della Create funzione per ottenere lo stile predefinito per l'oggetto CEditView .

CEditView::FindText

Chiamare la FindText funzione per cercare il CEditView buffer di testo dell'oggetto.

BOOL FindText(
    LPCTSTR lpszFind,
    BOOL bNext = TRUE,
    BOOL bCase = TRUE);

Parametri

lpszFind
Testo da trovare.

bNext
Specifica la direzione della ricerca. Se TRUE, la direzione di ricerca è verso la fine del buffer. Se FALSE, la direzione di ricerca è verso l'inizio del buffer.

bCase
Specifica se la ricerca fa distinzione tra maiuscole e minuscole. Se TRUE, la ricerca fa distinzione tra maiuscole e minuscole. Se FALSE, la ricerca non fa distinzione tra maiuscole e minuscole.

Valore restituito

Diverso da zero se viene trovato il testo di ricerca; in caso contrario, 0.

Osservazioni:

Questa funzione cerca nel buffer il testo specificato da lpszFind, a partire dalla selezione corrente, nella direzione specificata da bNext e con distinzione tra maiuscole e minuscole specificate da bCase. Se il testo viene trovato, imposta la selezione sul testo trovato e restituisce un valore diverso da zero. Se il testo non viene trovato, la funzione restituisce 0.

In genere non è necessario chiamare la funzione a meno che non si esegua l'override FindText OnFindNextdi , che chiama FindText.

CEditView::GetBufferLength

Chiamare questa funzione membro per ottenere il numero di caratteri attualmente presenti nel buffer del controllo di modifica, senza includere il carattere di terminazione Null.

UINT GetBufferLength() const;

Valore restituito

Lunghezza della stringa nel buffer.

CEditView::GetEditCtrl

Chiamare GetEditCtrl per ottenere un riferimento al controllo di modifica utilizzato dalla visualizzazione di modifica.

CEdit& GetEditCtrl() const;

Valore restituito

Riferimento a un oggetto CEdit.

Osservazioni:

Questo controllo è di tipo CEdit, quindi puoi modificare il controllo di modifica di Windows direttamente usando le CEdit funzioni membro.

Attenzione

L'utilizzo dell'oggetto CEdit può modificare lo stato del controllo di modifica di Windows sottostante. Ad esempio, non è consigliabile modificare le impostazioni della scheda usando la funzione CEdit::SetTabStops perché CEditView memorizza nella cache queste impostazioni per l'utilizzo sia nel controllo di modifica che nella stampa. Usare invece CEditView::SetTabStops.

Esempio

void CMyEditView::OnInitialUpdate()
{
   CEditView::OnInitialUpdate();

   // get the edit control and set some initial properties for it
   CEdit &theEdit = GetEditCtrl();

   // adjust the left margin without changing the right margin
   DWORD dwMargins = theEdit.GetMargins();
   theEdit.SetMargins(20, HIWORD(dwMargins));

   // only accept 10k of text
   theEdit.SetLimitText(10 * 1024);
}

CEditView::GetPrinterFont

Chiamare GetPrinterFont per ottenere un puntatore a un oggetto CFont che descrive il tipo di carattere della stampante corrente.

CFont* GetPrinterFont() const;

Valore restituito

Puntatore a un CFont oggetto che specifica il tipo di carattere della stampante corrente; NULL se il tipo di carattere della stampante non è stato impostato. Il puntatore può essere temporaneo e non deve essere memorizzato per usi successivi.

Osservazioni:

Se il tipo di carattere della stampante non è stato impostato, il comportamento di stampa predefinito della classe consiste nel stampare utilizzando lo stesso tipo di carattere utilizzato per la CEditView visualizzazione.

Utilizzare questa funzione per determinare il tipo di carattere della stampante corrente. Se non è il tipo di carattere della stampante desiderato, usare CEditView::SetPrinterFont per modificarlo.

CEditView::GetSelectedText

Chiamare GetSelectedText per copiare il testo selezionato in un CString oggetto, fino alla fine della selezione o al carattere che precede il primo carattere di ritorno a capo nella selezione.

void GetSelectedText(CString& strResult) const;

Parametri

strResult
Riferimento all'oggetto CString che deve ricevere il testo selezionato.

CEditView::LockBuffer

Chiamare questa funzione membro per ottenere un puntatore al buffer. Il buffer non deve essere modificato.

LPCTSTR LockBuffer() const;

Valore restituito

Puntatore al buffer del controllo di modifica.

CEditView::OnFindNext

Cerca nel testo nel buffer il testo specificato da lpszFind, nella direzione specificata da bNext, con distinzione tra maiuscole e minuscole specificate da bCase.

virtual void OnFindNext(
    LPCTSTR lpszFind,
    BOOL bNext,
    BOOL bCase);

Parametri

lpszFind
Testo da trovare.

bNext
Specifica la direzione della ricerca. Se TRUE, la direzione di ricerca è verso la fine del buffer. Se FALSE, la direzione di ricerca è verso l'inizio del buffer.

bCase
Specifica se la ricerca fa distinzione tra maiuscole e minuscole. Se TRUE, la ricerca fa distinzione tra maiuscole e minuscole. Se FALSE, la ricerca non fa distinzione tra maiuscole e minuscole.

Osservazioni:

La ricerca inizia all'inizio della selezione corrente e viene eseguita tramite una chiamata a FindText. Nell'implementazione predefinita chiama OnFindNext OnTextNotFound se il testo non viene trovato.

Eseguire l'override OnFindNext per modificare il modo in cui un CEditViewoggetto derivato da esegue la ricerca di testo. CEditView chiama OnFindNext quando l'utente sceglie il pulsante Trova successivo nella finestra di dialogo Trova standard.

CEditView::OnReplaceAll

CEditView chiama OnReplaceAll quando l'utente seleziona il pulsante Sostituisci tutto nella finestra di dialogo sostituisci standard.

virtual void OnReplaceAll(
    LPCTSTR lpszFind,
    LPCTSTR lpszReplace,
    BOOL bCase);

Parametri

lpszFind
Testo da trovare.

lpszReplace
Testo da sostituire con il testo di ricerca.

bCase
Specifica se la ricerca fa distinzione tra maiuscole e minuscole. Se TRUE, la ricerca fa distinzione tra maiuscole e minuscole. Se FALSE, la ricerca non fa distinzione tra maiuscole e minuscole.

Osservazioni:

OnReplaceAll cerca il testo nel buffer per il testo specificato da lpszFind, con distinzione tra maiuscole e minuscole specificate da bCase. La ricerca inizia all'inizio della selezione corrente. Ogni volta che viene trovato il testo di ricerca, questa funzione sostituisce tale occorrenza del testo con il testo specificato da lpszReplace. La ricerca viene eseguita tramite una chiamata a FindText. Nell'implementazione predefinita viene chiamato OnTextNotFound se il testo non viene trovato.

Se la selezione corrente non corrisponde a lpszFind, la selezione viene aggiornata alla prima occorrenza del testo specificato da lpszFind e non viene eseguita una sostituzione. Ciò consente all'utente di confermare che si tratta di ciò che vuole fare quando la selezione non corrisponde al testo da sostituire.

Eseguire l'override OnReplaceAll per modificare il modo in cui un CEditViewoggetto derivato da -sostituisce il testo.

CEditView::OnReplaceSel

CEditView chiama OnReplaceSel quando l'utente seleziona il pulsante Sostituisci nella finestra di dialogo Sostituisci standard.

virtual void OnReplaceSel(
    LPCTSTR lpszFind,
    BOOL bNext,
    BOOL bCase,
    LPCTSTR lpszReplace);

Parametri

lpszFind
Testo da trovare.

bNext
Specifica la direzione della ricerca. Se TRUE, la direzione di ricerca è verso la fine del buffer. Se FALSE, la direzione di ricerca è verso l'inizio del buffer.

bCase
Specifica se la ricerca fa distinzione tra maiuscole e minuscole. Se TRUE, la ricerca fa distinzione tra maiuscole e minuscole. Se FALSE, la ricerca non fa distinzione tra maiuscole e minuscole.

lpszReplace
Testo da sostituire con il testo trovato.

Osservazioni:

Dopo aver sostituito la selezione, questa funzione cerca nel testo nel buffer l'occorrenza successiva del testo specificato da lpszFind, nella direzione specificata da bNext, con distinzione tra maiuscole e minuscole specificate da bCase. La ricerca viene eseguita tramite una chiamata a FindText. Se il testo non viene trovato, viene chiamato OnTextNotFound .

Eseguire l'override OnReplaceSel per modificare il modo in cui un CEditViewoggetto derivato da sostituisce il testo selezionato.

CEditView::OnTextNotFound

Eseguire l'override di questa funzione per modificare l'implementazione predefinita, che chiama la funzione MessageBeepwindows .

virtual void OnTextNotFound(LPCTSTR lpszFind);

Parametri

lpszFind
Testo da trovare.

CEditView::P rintInsideRect

Chiamare PrintInsideRect per stampare il testo nel rettangolo specificato da rectLayout.

UINT PrintInsideRect(
    CDC *pDC,
    RECT& rectLayout,
    UINT nIndexStart,
    UINT nIndexStop);

Parametri

pDC
Puntatore al contesto del dispositivo della stampante.

rectLayout
Riferimento a un oggetto CRect o a una struttura RECT che specifica il rettangolo in cui deve essere eseguito il rendering del testo.

nIndexStart
Indice all'interno del buffer del primo carattere di cui eseguire il rendering.

nIndexStop
Indice all'interno del buffer del carattere che segue l'ultimo carattere di cui eseguire il rendering.

Valore restituito

Indice del carattere successivo da stampare, ovvero il carattere che segue l'ultimo carattere di cui è stato eseguito il rendering.

Osservazioni:

Se il CEditView controllo non dispone dello stile ES_AUTOHSCROLL, il testo viene disposto all'interno del rettangolo di rendering. Se il controllo ha lo stile ES_AUTOHSCROLL, il testo viene ritagliato sul bordo destro del rettangolo.

L'elemento rect.bottom dell'oggetto rectLayout viene modificato in modo che le dimensioni del rettangolo definiscino la parte del rettangolo originale occupato dal testo.

CEditView::SerializeRaw

Chiamare SerializeRaw per fare in modo che un CArchive oggetto legga o scriva il testo nell'oggetto CEditView in un file di testo.

void SerializeRaw(CArchive& ar);

Parametri

Ar
Riferimento all'oggetto CArchive che archivia il testo serializzato.

Osservazioni:

SerializeRaw differisce dall'implementazione CEditViewinterna di Serialize in quanto legge e scrive solo il testo, senza dati di descrizione dell'oggetto precedenti.

CEditView::SetPrinterFont

Chiamare SetPrinterFont per impostare il tipo di carattere della stampante sul tipo di carattere specificato da pFont.

void SetPrinterFont(CFont* pFont);

Parametri

pFont
Puntatore a un oggetto di tipo CFont. Se NULL, il tipo di carattere utilizzato per la stampa è basato sul tipo di carattere visualizzato.

Osservazioni:

Se si desidera che la visualizzazione usi sempre un tipo di carattere specifico per la stampa, includere una chiamata a SetPrinterFont nella funzione della OnPreparePrinting classe. Questa funzione virtuale viene chiamata prima che venga eseguita la stampa, quindi la modifica del tipo di carattere viene eseguita prima della stampa del contenuto della visualizzazione.

CEditView::SetTabStops

Chiamare questa funzione per impostare le tabulazioni utilizzate per la visualizzazione e la stampa.

void SetTabStops(int nTabStops);

Parametri

nTabStops
Larghezza di ogni tabulazione, in unità di dialogo.

Osservazioni:

È supportata solo una larghezza di tabulazione singola. ( CEdit gli oggetti supportano più larghezze di tabulazioni. Le larghezze si trovano in unità di dialogo, che corrispondono a un quarto della larghezza media dei caratteri (in base solo ai caratteri alfabetici maiuscoli e minuscoli) del tipo di carattere utilizzato al momento della stampa o della visualizzazione. Non è consigliabile usare CEdit::SetTabStops perché CEditView deve memorizzare nella cache il valore tabulazione.

Questa funzione modifica solo le schede dell'oggetto per cui viene chiamata. Per modificare le tabulazioni per ogni CEditView oggetto nell'applicazione, chiamare la funzione di SetTabStops ogni oggetto.

Esempio

Questo frammento di codice imposta le tabulazioni nel controllo su ogni quarto carattere misurando attentamente il tipo di carattere utilizzato dal controllo.

// gain a reference to the edit control
CEdit &theEdit = GetEditCtrl();

// get the font the control is using
CFont *pFont = theEdit.GetFont();
TEXTMETRIC tm;

// get the control's DC, too
CDC *pDC = theEdit.GetDC();

// Select the font that the control uses by default into the DC.
// We must do this because the control may or may not be using
// that font at this exact moment
CFont *pOldFont = pDC->SelectObject(pFont);

// Retrieve text metrics for that font and return the previously
// selected font.
pDC->GetTextMetrics(&tm);
pDC->SelectObject(pOldFont);

// Get an identity rectangle and map it to dialog units
CRect rect(0, 0, 100, 1);
::MapDialogRect((HWND)this, rect);

// We now know that 100 dialog units are rect.Width() screen units,
// so we can multiply screen units by 100 and divide by rect.Width()
// to find dialog units from screen units. tm.tmAveCharWidth is
// the width of _one_ character, so setting the tabs at every
// four characters means we also multiply by four.
SetTabStops((4 * tm.tmAveCharWidth * 100) / rect.Width());

CEditView::UnlockBuffer

Chiamare questa funzione membro per sbloccare il buffer.

void UnlockBuffer() const;

Osservazioni:

Chiamare UnlockBuffer dopo aver terminato di usare il puntatore restituito da LockBuffer.

Vedi anche

SuperPAD di esempio MFC
Classe CCtrlView
Grafico della gerarchia
Classe CEdit
Classe CDocument
Classe CDocTemplate
Classe CCtrlView
Classe CRichEditView