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 controleCEdit
.
Para obter mais informações sobre CEditView
, confira Classes de exibição derivadas disponíveis na MFC.
Hierarquia de herança
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