Partilhar via


Classe CEditView

Um tipo de classe de exibição que fornece a funcionalidade de um controle de edição do Windows e pode ser usado para implementar uma funcionalidade simples de editor de texto.

Sintaxe

class CEditView : public CCtrlView

Membros

Construtores públicos

Nome Descrição
CEditView::CEditView Constrói um objeto do tipo CEditView.

Métodos públicos

Nome Descrição
CEditView::FindText Pesquisa uma cadeia de caracteres dentro do texto.
CEditView::GetBufferLength Define o comprimento do buffer de caracteres.
CEditView::GetEditCtrl Fornece acesso à parte CEdit de um objeto CEditView (o controle de edição do Windows).
CEditView::GetPrinterFont Recupera a fonte da impressora atual.
CEditView::GetSelectedText Recupera a seleção do texto atual.
CEditView::LockBuffer Bloqueia o buffer.
CEditView::PrintInsideRect Renderiza o texto dentro de um determinado retângulo.
CEditView::SerializeRaw Serializa um objeto CEditView para o disco como texto bruto.
CEditView::SetPrinterFont Define uma nova fonte de impressora.
CEditView::SetTabStops Define paradas de tabulação para exibição e impressão de tela.
CEditView::UnlockBuffer Desbloqueia o buffer.

Métodos protegidos

Nome Descrição
CEditView::OnFindNext Localiza a próxima ocorrência de uma cadeia de caracteres de texto.
CEditView::OnReplaceAll Substitui todas as ocorrências de uma determinada cadeia de caracteres por uma nova cadeia de caracteres.
CEditView::OnReplaceSel Substitui a seleção atual.
CEditView::OnTextNotFound Chamado quando uma operação de localização falha ao corresponder a qualquer texto adicional.

Membros de Dados Públicos

Nome Descrição
CEditView::dwStyleDefault Estilo padrão para objetos do tipo CEditView.

Comentários

A classe CEditView fornece as seguintes funções adicionais:

  • Imprimir.

  • Localizar e substituir.

Como a classe CEditView é um derivado da classe CView, os objetos de classe CEditView podem ser usados com documentos e modelos de documento.

Cada texto de controle CEditView é mantido em seu próprio objeto de memória global. Seu aplicativo pode ter qualquer número de objetos CEditView.

Crie objetos do tipo CEditView se quiser uma janela de edição com a funcionalidade adicionada listada acima ou se quiser uma funcionalidade simples de editor de texto. Um objeto CEditView pode ocupar toda a área de cliente de uma janela. Derive suas próprias classes de CEditView para adicionar ou modificar a funcionalidade básica ou declarar classes que podem ser adicionadas a um modelo de documento.

A implementação padrão da classe CEditView manipula os seguintes comandos: ID_EDIT_SELECT_ALL, ID_EDIT_FIND, ID_EDIT_REPLACE, ID_EDIT_REPEAT e ID_FILE_PRINT.

O limite padrão de caracteres para CEditView é (1024 * 1024 - 1 = 1048575). Isso pode ser alterado chamando a função EM_LIMITTEXT do controle de edição subjacente. No entanto, os limites são diferentes dependendo do sistema operacional e do tipo de controle de edição (único ou multilinha). Para obter mais informações sobre esses limites, confira EM_LIMITTEXT.

Para alterar esse limite em seu controle, substitua a função OnCreate() para sua classe CEditView e insira a seguinte linha de código:

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

Os objetos de tipo CEditView (ou de tipos derivados de CEditView) têm as seguintes limitações:

  • CEditView não implementa uma edição de WYSIWYG (o que se vê é o que será impresso) verdadeira. Quando há uma opção entre a legibilidade na tela e a saída impressa correspondente, CEditView opta pela legibilidade da tela.

  • CEditView pode exibir texto em apenas uma única fonte. Não há suporte para formatação de caracteres especial. Confira a classe CRichEditView para obter mais funcionalidades.

  • A quantidade de texto que um CEditView pode conter é limitada. Os limites são os mesmos do controle CEdit.

Para obter mais informações sobre CEditView, confira Classes de exibição derivadas disponíveis na MFC.

Hierarquia de herança

CObject

CCmdTarget

CWnd

CView

CCtrlView

CEditView

Requisitos

Cabeçalho: afxext.h

CEditView::CEditView

Constrói um objeto do tipo CEditView.

CEditView();

Comentários

Depois de construir o objeto, você deve chamar a função CWnd::Create antes que o controle de edição seja usado. Se você derivar uma classe CEditView e adicioná-la ao modelo usando CWinApp::AddDocTemplate, a estrutura chamará esse construtor e a função Create.

CEditView::dwStyleDefault

Contém o estilo padrão do objeto CEditView.

static const DWORD dwStyleDefault;

Comentários

Passe esse membro estático como o parâmetro dwStyle da função Create para obter o estilo padrão para o objeto CEditView.

CEditView::FindText

Chame a função FindText para pesquisar o buffer de texto do objeto CEditView.

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

Parâmetros

lpszFind
O texto a ser encontrado.

bNext
Especifica a direção da pesquisa. Se TRUE, a direção da pesquisa será o final do buffer. Se FALSE, a direção da pesquisa será o início do buffer.

bCase
Especifica se há diferenciação de maiúsculas e minúsculas na pesquisa. Se TRUE, a pesquisa diferenciará maiúsculas de minúsculas. Se FALSE, a pesquisa não diferenciará maiúsculas de minúsculas.

Valor de retorno

Diferente de zero se o texto da pesquisa for encontrado; caso contrário, 0.

Comentários

Essa função pesquisa o texto no buffer para o texto especificado por lpszFind, começando na seleção atual, na direção especificada pelo bNext, e com a diferenciação de maiúsculas e minúsculas especificada pelo bCase. Se o texto for encontrado, ele definirá a seleção para o texto encontrado e retornará um valor não zero. Se o texto não for encontrado, a função retornará 0.

Normalmente, você não precisa chamar a função FindText a menos que você substitua OnFindNext, que chama FindText.

CEditView::GetBufferLength

Chame essa função de membro para obter o número de caracteres atualmente no buffer do controle de edição, sem incluir o terminador nulo.

UINT GetBufferLength() const;

Valor de retorno

O tamanho da cadeia de caracteres no buffer.

CEditView::GetEditCtrl

Chame GetEditCtrl para obter uma referência ao controle de edição usado pelo modo de exibição de edição.

CEdit& GetEditCtrl() const;

Valor de retorno

Uma referência a um objeto CEdit.

Comentários

Esse controle é do tipo CEdit, para que você possa manipular o controle de edição do Windows diretamente usando as funções de membro CEdit.

Cuidado

O uso do objeto CEdit pode alterar o estado do controle de edição subjacente do Windows. Por exemplo, você não deve alterar as configurações de tabulação usando a função CEdit::SetTabStops porque CEditView armazena em cache essas configurações para uso no controle de edição e na impressão. Em vez disso, use CEditView::SetTabStops.

Exemplo

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

Chame GetPrinterFont para obter um ponteiro para um objeto CFont que descreve a fonte da impressora atual.

CFont* GetPrinterFont() const;

Valor de retorno

Um ponteiro para um objeto CFont que especifica a fonte da impressora atual; NULL se a fonte da impressora não tiver sido definida. O ponteiro pode ser temporário e não deve ser armazenado para uso posterior.

Comentários

Se a fonte da impressora não tiver sido definida, o comportamento padrão de impressão da classe CEditView será imprimir usando a mesma fonte usada para exibição.

Use essa função para determinar a fonte da impressora atual. Se não for a fonte de impressora desejada, use CEditView::SetPrinterFont para alterá-la.

CEditView::GetSelectedText

Chame GetSelectedText para copiar o texto selecionado em um objeto CString até o final da seleção ou o caractere que precede o primeiro caractere de retorno de carro na seleção.

void GetSelectedText(CString& strResult) const;

Parâmetros

strResult
Uma referência ao objeto CString que deve receber o texto selecionado.

CEditView::LockBuffer

Chame essa função de membro para obter um ponteiro para o buffer. O buffer não deve ser modificado.

LPCTSTR LockBuffer() const;

Valor de retorno

Um ponteiro para o buffer do controle de edição.

CEditView::OnFindNext

Pesquisa o texto no buffer para o texto especificado por lpszFind, na direção especificada pelo bNext, com a diferenciação de maiúsculas e minúsculas especificada por bCase.

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

Parâmetros

lpszFind
O texto a ser encontrado.

bNext
Especifica a direção da pesquisa. Se TRUE, a direção da pesquisa será o final do buffer. Se FALSE, a direção da pesquisa será o início do buffer.

bCase
Especifica se há diferenciação de maiúsculas e minúsculas na pesquisa. Se TRUE, a pesquisa diferenciará maiúsculas de minúsculas. Se FALSE, a pesquisa não diferenciará maiúsculas de minúsculas.

Comentários

A pesquisa começa no início da seleção atual e é realizada por meio de uma chamada para FindText. Na implementação padrão, OnFindNext chamará OnTextNotFound se o texto não for encontrado.

Substitua OnFindNext para alterar a forma como um objeto derivado de CEditView pesquisa texto. CEditView chama OnFindNext quando o usuário escolhe o botão Localizar Próximo na caixa de diálogo Localizar padrão.

CEditView::OnReplaceAll

CEditView chama OnReplaceAll quando o usuário seleciona o botão Substituir Tudo na caixa de diálogo Substituir padrão.

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

Parâmetros

lpszFind
O texto a ser encontrado.

lpszReplace
O texto pelo qual o texto de pesquisa será substituído.

bCase
Especifica se há diferenciação de maiúsculas e minúsculas na pesquisa. Se TRUE, a pesquisa diferenciará maiúsculas de minúsculas. Se FALSE, a pesquisa não diferenciará maiúsculas de minúsculas.

Comentários

OnReplaceAll pesquisa o texto no buffer para o texto especificado por lpszFind, com a diferenciação de maiúsculas e minúsculas especificada por bCase. A pesquisa começa no início da seleção atual. Cada vez que o texto de pesquisa é encontrado, essa função substitui essa ocorrência do texto pelo texto especificado por lpszReplace. A pesquisa é realizada por meio de uma chamada para FindText. Na implementação padrão, OnTextNotFound será chamado se o texto não for encontrado.

Se a seleção atual não corresponder ao lpszFind, a seleção será atualizada para a primeira ocorrência do texto especificado pelo lpszFind e uma substituição não será executada. Isso permite que o usuário confirme que isso é o que deseja fazer quando a seleção não corresponde ao texto a ser substituído.

Substitua OnReplaceAll para alterar a forma como um objeto derivado de CEditView substitui o texto.

CEditView::OnReplaceSel

CEditView chama OnReplaceSel quando o usuário seleciona o botão Substituir na caixa de diálogo Substituir padrão.

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

Parâmetros

lpszFind
O texto a ser encontrado.

bNext
Especifica a direção da pesquisa. Se TRUE, a direção da pesquisa será o final do buffer. Se FALSE, a direção da pesquisa será o início do buffer.

bCase
Especifica se há diferenciação de maiúsculas e minúsculas na pesquisa. Se TRUE, a pesquisa diferenciará maiúsculas de minúsculas. Se FALSE, a pesquisa não diferenciará maiúsculas de minúsculas.

lpszReplace
O texto a ser substituído pelo texto encontrado.

Comentários

Após substituir a seleção, essa função pesquisa o texto no buffer para a próxima ocorrência do texto especificado por lpszFind, na direção especificada pelo bNext, e com a diferenciação de maiúsculas e minúsculas especificada pelo bCase. A pesquisa é realizada por meio de uma chamada para FindText. Se o texto não for encontrado, OnTextNotFound será chamado.

Substitua OnReplaceSel para alterar a forma como um objeto derivado de CEditView substitui o texto selecionado.

CEditView::OnTextNotFound

Substitua essa função para alterar a implementação padrão, que chama a função MessageBeep do Windows.

virtual void OnTextNotFound(LPCTSTR lpszFind);

Parâmetros

lpszFind
O texto a ser encontrado.

CEditView::PrintInsideRect

Chame PrintInsideRect para imprimir o texto no retângulo especificado por rectLayout.

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

Parâmetros

pDC
Ponteiro para o contexto do dispositivo da impressora.

rectLayout
Referência a um objeto CRect ou estrutura RECT especificando o retângulo no qual o texto deve ser renderizado.

nIndexStart
Indexe dentro do buffer do primeiro caractere a ser renderizado.

nIndexStop
Indexe dentro do buffer do caractere após o último caractere a ser renderizado.

Valor de retorno

O índice do próximo caractere a ser impresso (ou seja, o caractere após o último caractere renderizado).

Comentários

Se o controle CEditView não tiver o estilo ES_AUTOHSCROLL, o texto será encapsulado no retângulo de renderização. Se o controle tiver o estilo ES_AUTOHSCROLL, o texto será recortado na extremidade direta do retângulo.

O elemento rect.bottom do objeto rectLayout é alterado para que as dimensões do retângulo definam a parte do retângulo original que é ocupada pelo texto.

CEditView::SerializeRaw

Chame SerializeRaw para que um objeto CArchive leia ou escreva o texto no objeto CEditView para um arquivo de texto.

void SerializeRaw(CArchive& ar);

Parâmetros

ar
Referência ao CArchive objeto que armazena o texto serializado.

Comentários

SerializeRaw difere da implementação interna de CEditView de Serialize, pois ele lê e grava apenas o texto, sem os dados anteriores de descrição do objeto.

CEditView::SetPrinterFont

Chame SetPrinterFont para definir a fonte da impressora para a fonte especificada por pFont.

void SetPrinterFont(CFont* pFont);

Parâmetros

pFont
Um ponteiro para um objeto do tipo CFont. Se for NULL, a fonte usada para impressão será baseada na fonte de exibição.

Comentários

Se você quiser que seu modo de exibição sempre use uma fonte específica para impressão, inclua uma chamada em SetPrinterFont na sua função de classe OnPreparePrinting. Essa função virtual é chamada antes de a impressão ocorrer, portanto, a alteração de fonte ocorre antes que o conteúdo do modo de exibição seja impresso.

CEditView::SetTabStops

Chame essa função para definir as paradas de tabulação usadas para exibição e impressão.

void SetTabStops(int nTabStops);

Parâmetros

nTabStops
Largura de cada parada de tabulação, em unidades de diálogo.

Comentários

Há suporte apenas para uma única largura de parada de tabulação. (Os objetos CEdit dão suporte a várias larguras de tabulação). As larguras estão em unidades de diálogo, que são iguais a um quarto da largura média de caracteres (com base apenas em caracteres alfabéticos maiúsculos e minúsculos) da fonte usada no momento da impressão ou exibição. Você não deve usar CEdit::SetTabStops porque CEditView deve armazenar em cache o valor de parada de tabulação.

Essa função modifica apenas as guias do objeto para o qual ela é chamada. Para alterar as paradas de tabulação de cada objeto CEditView em seu aplicativo, chame a função de SetTabStops de cada objeto.

Exemplo

Esse fragmento de código define as paradas de tabulação no controle para cada quarto caractere medindo, cuidadosamente, a fonte que o controle usa.

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

Chame essa função de membro para desbloquear o buffer.

void UnlockBuffer() const;

Comentários

Chame UnlockBuffer depois de terminar de usar o ponteiro retornado por LockBuffer.

Confira também

SUPERPAD de amostra do MFC
Classe CCtrlView
Gráfico da hierarquia
Classe CEdit
Classe CDocument
Classe CDocTemplate
Classe CCtrlView
Classe CRichEditView