Compartir vía


Clase CEditView

Un tipo de clase de vista que proporciona la funcionalidad de un control de edición de Windows y se puede utilizar para implementar funcionalidad de editor de texto simple.

Sintaxis

class CEditView : public CCtrlView

Miembros

Constructores públicos

Nombre Descripción
CEditView::CEditView Construye un objeto de tipo CEditView.

Métodos públicos

Nombre Descripción
CEditView::FindText Busca una cadena dentro del texto.
CEditView::GetBufferLength Obtiene la longitud del búfer de caracteres.
CEditView::GetEditCtrl Proporciona acceso a la parte CEdit de un objeto CEditView (control de edición de Windows).
CEditView::GetPrinterFont Recupera la fuente actual de la impresora.
CEditView::GetSelectedText Recupera la selección actual del texto.
CEditView::LockBuffer Bloquea el buffer.
CEditView::PrintInsideRect Representa el texto dentro de un rectángulo determinado.
CEditView::SerializeRaw Serializa un objeto CEditView en el disco como texto sin formato.
CEditView::SetPrinterFont Establece una nueva fuente de impresora.
CEditView::SetTabStops Establece los topes de tabulación para la visualización de la pantalla y la impresión.
CEditView::UnlockBuffer Desbloquea el búfer.

Métodos protegidos

Nombre Descripción
CEditView::OnFindNext Busca la siguiente aparición de una cadena de texto.
CEditView::OnReplaceAll Reemplaza todas las apariciones de una cadena determinada por una nueva cadena.
CEditView::OnReplaceSel Reemplaza la selección actual.
CEditView::OnTextNotFound Se llama cuando una operación de búsqueda no coincide con cualquier texto adicional.

Miembros de datos públicos

Nombre Descripción
CEditView::dwStyleDefault Estilo predeterminado para objetos de tipo CEditView.

Comentarios

La clase CEditView proporciona las siguientes funciones adicionales:

  • Impresión.

  • Buscar y reemplazar.

Dado que la clase CEditView es un derivado de la clase CView, los objetos de la clase CEditView se pueden usar con documentos y plantillas de documento.

Cada texto de control CEditView se mantiene en su propio objeto de memoria global. La aplicación puede tener cualquier número de objetos CEditView.

Cree objetos de tipo CEditView si desea una ventana de edición con la funcionalidad agregada enumerada anteriormente o si desea una funcionalidad sencilla del editor de texto. Un objeto CEditView puede ocupar todo el área de cliente de una ventana. Derive sus propias clases de CEditView para agregar o modificar la funcionalidad básica o para declarar clases que se pueden agregar a una plantilla de documento.

La implementación predeterminada de la clase CEditView controla los siguientes comandos: ID_EDIT_SELECT_ALL, ID_EDIT_FIND, ID_EDIT_REPLACE, ID_EDIT_REPEAT, y ID_FILE_PRINT.

El límite de caracteres predeterminado para CEditView es (1024 * 1024 - 1 = 1048575). Esto se puede cambiar llamando a la función EM_LIMITTEXT del control de edición subyacente. Sin embargo, los límites son diferentes en función del sistema operativo y del tipo de control de edición (única o multilínea). Para más información sobre estos limites, consulte EM_LIMITTEXT.

Para cambiar este límite en el control, invalide la función OnCreate() de la clase CEditView e inserte la siguiente línea de código:

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

Los objetos de tipo CEditView (o de los tipos derivados de CEditView) tienen las siguientes limitaciones:

  • CEditView no implementa true, lo que se ve es lo que se obtiene editando (WYSIWYG). Si hay una opción entre legibilidad en la pantalla y la salida impresa coincidente, CEditView opta por la legibilidad de la pantalla.

  • CEditView puede mostrar el texto en una sola fuente. No se admite ningún formato de caracteres especiales. Consulte la clase CRichEditView para obtener más funcionalidades.

  • La cantidad de texto que CEditView puede contener es limitada. Los límites son los mismos que para el control CEdit.

Para obtener más información sobre CEditView, consulte Clases de vista derivadas disponibles en MFC.

Jerarquía de herencia

CObject

CCmdTarget

CWnd

CView

CCtrlView

CEditView

Requisitos

Encabezado: afxext.h

CEditView::CEditView

Construye un objeto de tipo CEditView.

CEditView();

Comentarios

Después de construir el objeto, debe llamar a la función CWnd::Create antes de usar el control de edición. Si se deriva una clase de CEditView y la agrega a la plantilla mediante CWinApp::AddDocTemplate, el marco llama tanto a este constructor como a la función Create.

CEditView::dwStyleDefault

Contiene el estilo predeterminado del objeto CEditView.

static const DWORD dwStyleDefault;

Comentarios

Pase este miembro estático como parámetro dwStyle de la función Create para obtener el estilo predeterminado para el objeto CEditView.

CEditView::FindText

Llame a la función FindText para buscar en el búfer de texto del objeto CEditView.

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

Parámetros

lpszFind
El texto que se va a encontrar.

bNext
Especifica la dirección de la búsqueda. Si es TRUE, la dirección de búsqueda está hacia el final del búfer. Si es FALSE, la dirección de búsqueda es hacia el principio del búfer.

bCase
Especifica si la búsqueda distingue entre mayúsculas y minúsculas. Si es TRUE, la búsqueda distingue entre mayúsculas y minúsculas. Si es FALSE, la búsqueda no hace distinción de mayúsculas y minúsculas.

Valor devuelto

Distinto de cero si se encuentra el texto de búsqueda; de lo contrario es 0.

Comentarios

Esta función busca en el búfer el texto especificado por lpszFind, comenzando en la selección actual, de la dirección especificada por bNext y con distinción entre mayúsculas y minúsculas especificada por bCase. Si se encuentra el texto, se establece la selección en el texto encontrado y se devuelve un valor distinto de cero. Si no se encuentra el texto, la función devuelve 0.

Normalmente no es necesario llamar a la función FindText a menos que se invalide OnFindNext, que llama a FindText.

CEditView::GetBufferLength

Llame a esta función miembro para obtener el número de caracteres que se encuentran actualmente en el búfer del control de edición, no incluido el terminador null.

UINT GetBufferLength() const;

Valor devuelto

Longitud de la cadena en el buffer.

CEditView::GetEditCtrl

Llame a GetEditCtrl para obtener una referencia al control de edición usado por la vista de edición.

CEdit& GetEditCtrl() const;

Valor devuelto

Referencia a un objeto CEdit.

Comentarios

Este control es de tipo CEdit, por lo que puede manipular el control de edición de Windows directamente mediante las funciones miembro CEdit.

Precaución

El uso del objeto CEdit puede cambiar el estado del control de edición subyacente de Windows. Por ejemplo, no debe cambiar la configuración de la tabulación mediante la función CEdit::SetTabStops porque CEditView almacena en la caché esta configuración para su uso tanto en el control de edición como en la impresión. En su lugar, use CEditView::SetTabStops.

Ejemplo

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

Llame a GetPrinterFont para obtener un puntero a un objeto CFont que describa la fuente de la impresora actual.

CFont* GetPrinterFont() const;

Valor devuelto

Puntero a un objeto CFont que especifica la fuente de la impresora actual; NULL si no se ha establecido la fuente de la impresora. El puntero puede ser temporal y no se debe almacenar para su uso posterior.

Comentarios

Si no se ha establecido la fuente de la impresora, el comportamiento de impresión predeterminado de la clase CEditView es imprimir con la misma fuente usada para mostrar.

Use esta función para determinar la fuente de la impresora actual. Si no es la fuente de impresora deseada, use CEditView::SetPrinterFont para cambiarla.

CEditView::GetSelectedText

Llame a GetSelectedText para copiar el texto seleccionado en un objeto CString, hasta el final de la selección o el carácter anterior al primer carácter de retorno de carro de la selección.

void GetSelectedText(CString& strResult) const;

Parámetros

strResult
Referencia al objeto CString que va a recibir el texto seleccionado.

CEditView::LockBuffer

Llame a esta función miembro para obtener un puntero al búfer. No se debe modificar el búfer.

LPCTSTR LockBuffer() const;

Valor devuelto

Un puntero al buffer del control de edición.

CEditView::OnFindNext

Busca en el búfer el texto especificado por lpszFind, en la dirección especificada por bNext, con distinción entre mayúsculas y minúsculas especificada por bCase.

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

Parámetros

lpszFind
El texto que se va a encontrar.

bNext
Especifica la dirección de la búsqueda. Si es TRUE, la dirección de búsqueda está hacia el final del búfer. Si es FALSE, la dirección de búsqueda es hacia el principio del búfer.

bCase
Especifica si la búsqueda distingue entre mayúsculas y minúsculas. Si es TRUE, la búsqueda distingue entre mayúsculas y minúsculas. Si es FALSE, la búsqueda no hace distinción de mayúsculas y minúsculas.

Comentarios

La búsqueda inicia al principio de la selección actual y se realiza a través de una llamada a FindText. En la implementación predeterminada, OnFindNext llama a OnTextNotFound si el texto no se encuentra.

Invalide OnFindNext para cambiar la forma en que un objeto derivadoCEditView busca el texto. CEditView llama OnFindNext cuando el usuario elige el botón Buscar siguiente en el cuadro de diálogo Buscar estándar.

CEditView::OnReplaceAll

CEditView llama OnReplaceAll cuando el usuario selecciona el botón Reemplazar todo en el cuadro de diálogo Reemplazar estándar.

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

Parámetros

lpszFind
El texto que se va a encontrar.

lpszReplace
Texto para reemplazar el texto de búsqueda.

bCase
Especifica si la búsqueda distingue entre mayúsculas y minúsculas. Si es TRUE, la búsqueda distingue entre mayúsculas y minúsculas. Si es FALSE, la búsqueda no hace distinción de mayúsculas y minúsculas.

Comentarios

OnReplaceAll busca en el búfer el texto especificado por lpszFind, con distinción entre mayúsculas y minúsculas especificada por bCase. La búsqueda inicia al principio de la selección actual. Cada vez que se encuentra el texto de búsqueda, esta función reemplaza esa aparición del texto por el texto especificado por lpszReplace. La búsqueda se realiza a través de una llamada a FindText. En la implementación predeterminada se llama a OnTextNotFound si el texto no se encuentra.

Si la selección actual no coincide con lpszFind, la selección se actualiza a la primera aparición del texto especificado por lpszFind y no se realiza un reemplazo. Esto permite al usuario confirmar que esto es lo que quiere hacer cuando la selección no coincide con el texto que se va a reemplazar.

Invalide OnReplaceAll para cambiar la forma en que un objeto derivadoCEditView reemplaza el texto.

CEditView::OnReplaceSel

CEditView llama OnReplaceSel cuando el usuario selecciona el botón Reemplazar todo en el cuadro de diálogo Reemplazar estándar.

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

Parámetros

lpszFind
El texto que se va a encontrar.

bNext
Especifica la dirección de la búsqueda. Si es TRUE, la dirección de búsqueda está hacia el final del búfer. Si es FALSE, la dirección de búsqueda es hacia el principio del búfer.

bCase
Especifica si la búsqueda distingue entre mayúsculas y minúsculas. Si es TRUE, la búsqueda distingue entre mayúsculas y minúsculas. Si es FALSE, la búsqueda no hace distinción de mayúsculas y minúsculas.

lpszReplace
Texto con el que se va a reemplazar el texto encontrado.

Comentarios

Después de reemplazar la selección, esta función busca en el texto del buffer la siguiente aparición del texto especificado por lpszFind, en la dirección especificada por bNext con distinción entre mayúsculas y minúsculas especificada por bCase. La búsqueda se realiza a través de una llamada a FindText. Si no se encuentra el texto, se llama a OnTextNotFound .

Invalide OnReplaceSel para cambiar la forma en que un objeto derivadoCEditView reemplaza el texto seleccionado.

CEditView::OnTextNotFound

Invalide esta función para cambiar la implementación predeterminada que llama a la función MessageBeepde Windows.

virtual void OnTextNotFound(LPCTSTR lpszFind);

Parámetros

lpszFind
El texto que se va a encontrar.

CEditView::PrintInsideRect

Llame a PrintInsideRect para imprimir el texto en el rectángulo especificado por rectLayout.

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

Parámetros

pDC
Apunta al contexto del dispositivo de la impresora.

rectLayout
Referencia a un objeto CRect o estructura RECT que especifica el rectángulo en el que se va a representar el texto.

nIndexStart
Índice dentro del búfer del primer carácter que se va a representar.

nIndexStop
Índice dentro del búfer del carácter que sigue al último carácter que se va a representar.

Valor devuelto

Índice del siguiente carácter que se va a imprimir (es decir, el carácter que sigue al último carácter representado).

Comentarios

Si el control CEditView no tiene el estilo ES_AUTOHSCROLL, el texto se encapsula dentro del rectángulo de representación. Si el control tiene el estilo ES_AUTOHSCROLL, el texto se recorta en el borde derecho del rectángulo.

El elemento rect.bottom del objeto rectLayout se cambia para que las dimensiones del rectángulo definan la parte del rectángulo original ocupado por el texto.

CEditView::SerializeRaw

Llame a SerializeRaw para que un objeto CArchive lea o escriba el texto en el objeto CEditView a un archivo de texto.

void SerializeRaw(CArchive& ar);

Parámetros

Ar
Referencia al objeto CArchive que almacena el texto serializado.

Comentarios

SerializeRaw difiere de la implementación interna de CEditView deSerialize en que lee y escribe solo el texto, sin datos anteriores de descripción de objeto.

CEditView::SetPrinterFont

Llame a SetPrinterFont para establecer la fuente de la impresora en la fuente especificada por pFont.

void SetPrinterFont(CFont* pFont);

Parámetros

pFont
Puntero a un objeto de tipo CFont. Si es NULL, la fuente usada para imprimir se basa en la fuente de presentación.

Comentarios

Si desea que la vista use siempre una fuente determinada para imprimirla, incluya una llamada a SetPrinterFont en la función de la clase OnPreparePrinting. Se llama a esta función virtual antes de que se produzca la impresión, por lo que el cambio de fuente tiene lugar antes de imprimir el contenido de la vista.

CEditView::SetTabStops

Llame a esta función para establecer las tabulaciones usadas para mostrar e imprimir.

void SetTabStops(int nTabStops);

Parámetros

nTabStops
Ancho de cada tabulación, en unidades de diálogo.

Comentarios

Sólo se admite un único ancho de tabulación. (los objetos CEdit admiten varias anchuras de tabulación). Las anchuras se encuentran en unidades de diálogo, que equivalen a un cuarto del ancho medio de caracteres (basado solo en caracteres alfabéticos en mayúsculas y minúsculas) de la fuente usada en el momento de imprimir o mostrar. No se debe usar CEdit::SetTabStops porque CEditView debe almacenar en caché el valor de la pestaña.

Esta función modifica solo las tabulaciones del objeto para el que se llama. Para cambiar las tabulaciones de cada objeto CEditView de la aplicación, llame a la función de cada objeto de SetTabStops.

Ejemplo

Este fragmento de código establece las paradas de tabulación del control en cada cuarto carácter midiendo cuidadosamente la fuente que usa el control.

// 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

Llame a esta función miembro para desbloquear el búfer.

void UnlockBuffer() const;

Comentarios

Llame a UnlockBuffer cuando haya terminado de usar el puntero devuelto por LockBuffer.

Consulte también

SUPERPAD de ejemplo de MFC
CCtrlView (clase)
Gráfico de jerarquías
CEdit (clase)
CDocument (clase)
CDocTemplate (clase)
CCtrlView (clase)
CRichEditView (clase)