Sobre os controles de edição

Um controle de edição é uma janela de controle retangular normalmente usada em uma caixa de diálogo para permitir que o usuário insira e edite texto.

Os controles de edição oferecem suporte ao conjunto de caracteres Unicode, no qual os caracteres têm dois bytes, e aos conjuntos de caracteres ANSI, nos quais os caracteres têm um byte. Para obter mais informações sobre conjuntos de caracteres Unicode e ANSI, consulte Unicode e conjuntos de caracteres.

Os controles de edição avançada oferecem suporte a muitos recursos não disponíveis nos controles de edição do sistema. Para obter mais informações, consulte Controles de edição avançada.

Os tópicos a seguir são discutidos nesta visão geral.

Editar recursos de controle

Quando ele é selecionado, um controle de edição exibe um cursor piscante que indica o ponto de inserção. O usuário pode inserir texto, mover o ponto de inserção ou selecionar o texto a ser editado usando o teclado ou o mouse. Um controle de edição envia códigos de notificação para sua janela pai na forma de mensagens WM_COMMAND. Para obter mais informações sobre mensagens de um controle de edição, consulte Editar mensagens de notificação de controle. Uma janela pai pode enviar mensagens para um controle de edição em uma caixa de diálogo chamando a função SendDlgItemMessage. Algumas mensagens também podem ser enviadas usando macros predefinidas.

O sistema fornece controles de edição de linha única e controles de edição de várias linhas. Os controles Edit pertencem à classe de janela EDIT.

Uma caixa de combinação é um controle que combina grande parte da funcionalidade de um controle de edição e uma caixa de listagem. Em uma caixa de combinação, o controle de edição exibe a seleção atual e a caixa de listagem apresenta opções que um usuário pode selecionar. Para obter mais informações sobre caixas de combinação, consulte Caixas de combinação.

Muitos desenvolvedores usam as caixas de diálogo fornecidas na biblioteca de caixas de diálogo comum (Comdlg32.dll) para executar tarefas que, de outra forma, poderiam exigir controles de edição personalizados. Para obter informações sobre caixas de diálogo comuns, consulte Biblioteca de caixas de diálogo comuns.

Editar tipos e estilos de controle

Um controle de edição individual pode ter vários estilos ao mesmo tempo. A maioria dos desenvolvedores usa ferramentas para desenvolver caixas de diálogo e, portanto, talvez não precise especificar estilos de controle de edição explicitamente. No entanto, se um aplicativo criar um controle de edição usando a função CreateWindow ou CreateWindowEx, ele deverá especificar esses estilos de controle de edição. Para obter uma tabela de estilos de controle de edição, consulte Editar estilos de controle.

Cada controle de edição especifica uma combinação de valores de estilo que definem a aparência e os recursos do controle de edição. Os valores de estilo podem estabelecer a aparência de um controle de edição de linha única ou multilinha; alinhar o texto no controle; e determine como, e mesmo se, o texto aparece no controle de edição.

Estilo Multilinha

Há dois estilos de linha para controles de edição. O padrão é um controle de edição de linha única. Um aplicativo também pode criar um controle de edição de várias linhas usando o estilo ES_MULTILINE .

Estilos de rolagem

O estilo ES_AUTOHSCROLL diz ao controle de edição para rolar o texto horizontalmente, quando necessário, à medida que o usuário insere texto. Se esse estilo não for especificado, o controle de edição não poderá rolar horizontalmente. Para controles de edição de linha única sem ES_AUTOHSCROLL, somente os caracteres que preenchem a área visível do controle são aceitos. Para controles de edição de várias linhas sem ES_AUTOHSCROLL, o texto é quebrado para a próxima linha quando o usuário insere mais texto do que pode ser exibido em uma única linha. Se ES_AUTOHSCROLL for especificado para um controle de edição de várias linhas, o controle rolará horizontalmente quando o usuário inserir mais texto do que pode ser exibido em uma única linha, o texto não será quebrado.

ES_AUTOHSCROLL é aplicado automaticamente a um controle de edição de várias linhas alinhado à esquerda que tem um estilo WS_HSCROLL. Em outras palavras, qualquer controle de edição multilinha alinhado à esquerda que tenha uma barra de rolagem horizontal rola automaticamente horizontalmente.

ES_AUTOHSCROLL é ignorado por um controle de edição de várias linhas que não está alinhado à esquerda. Os controles de edição multilinha centralizados e alinhados à direita não podem ser rolados horizontalmente

O estilo ES_AUTOVSCROLL diz ao controle de edição para rolar o texto verticalmente quando o usuário insere mais texto do que pode ser exibido no controle de edição. Esse estilo só se aplica a controles de edição de várias linhas. Se esse estilo não for especificado para um controle de edição de várias linhas, o controle de edição não aceitará a entrada quando mais texto for inserido do que pode ser exibido.

Estilos de alinhamento

Há três estilos que fazem com que o sistema alinhe o texto em um controle de edição. Os estilos ES_LEFT, ES_CENTER e ES_RIGHT determinam se o texto está alinhado à esquerda, ao centro ou à direita, respectivamente. Os controles de edição multilinha alinhados à direita e centralizados não podem ter o estilo ES_AUTOHSCROLL , ou seja, não podem rolar horizontalmente.

Embora não seja possível alterar o estilo de alinhamento de um controle de edição dinamicamente, as seguintes técnicas podem ser usadas para contornar essa restrição:

  • Crie vários controles de edição, um para cada estilo que o aplicativo precisa e alterne entre eles conforme necessário.
  • Crie um novo controle de edição com o estilo desejado conforme necessário e alterne para o novo controle.

Texto e estilos de entrada

Um aplicativo pode usar estilos para especificar como o controle de edição exibe texto. O estilo ES_LOWERCASE faz com que todos os caracteres maiúsculos inseridos no controle de edição sejam convertidos em minúsculas. Da mesma forma, o estilo ES_UPPERCASE faz com que todos os caracteres minúsculos sejam convertidos em maiúsculas.

Para obter mais informações sobre conjuntos de caracteres, consulte Unicode e conjuntos de caracteres.

O estilo ES_NUMBER restringe a entrada a dígitos somente no controle de edição.

O estilo ES_READONLY altera o controle de edição para status somente leitura.

O estilo ES_PASSWORD exibe todos os caracteres em um controle de edição de linha única como asteriscos. Um aplicativo pode definir um caractere diferente para exibir usando a mensagem EM_SETPASSWORDCHAR, conforme descrito posteriormente neste tópico.

Se um controle de edição for de Comctl32.dll versão 6, um círculo preto será o caractere padrão para o estilo ES_PASSWORD. Em controles de edição de versões anteriores dos controles comuns, o caractere padrão é um asterisco.

O estilo ES_OEMCONVERT faz com que o texto inserido no controle de edição seja convertido do conjunto de caracteres do Windows para o conjunto de caracteres OEM e, em seguida, de volta para o conjunto de caracteres do Windows. Isso garante a conversão de caracteres adequada quando o aplicativo chama a função CharToOem para converter uma cadeia de caracteres do Windows no controle de edição em caracteres OEM. ES_OEMCONVERT é mais útil para editar controles que contêm nomes de arquivo que serão usados em sistemas de arquivos que não oferecem suporte a Unicode.

Para um controle de edição de várias linhas em uma caixa de diálogo, o estilo ES_WANTRETURN faz com que o controle insira um retorno de carro quando o usuário pressiona a tecla ENTER ao inserir texto. Se esse estilo não for especificado, pressionar a tecla ENTER terá o mesmo efeito que pressionar o botão padrão na caixa de diálogo. Sem ES_WANTRETURN, o usuário deve pressionar CTRL+ENTER para inserir um retorno de carro. Para obter informações sobre quebra de linha e quebra de linha, consulte Manipulando quebras de linha e quebra de linha.

Estilos visuais

O estilo ES_NOHIDESEL faz com que o texto selecionado permaneça realçado quando o controle de edição não tem o foco. Sem esse estilo, o texto selecionado perde o realce quando o controle perde o foco.

Por padrão, um controle de edição não tem borda. Para dar um, um aplicativo pode usar o estilo de janela WS_BORDER.

Para usar estilos visuais com controles de edição, um aplicativo deve incluir um manifesto e deve chamar InitCommonControls no início do programa. Para obter informações sobre estilos visuais, consulte Estilos visuais. Para obter informações sobre manifestos, consulte Habilitando estilos visuais.

O buffer de texto

O sistema armazena o texto do controle de edição em um buffer e o copia para o controle, conforme necessário.

Os tópicos a seguir discutem como o sistema aloca e inicializa o buffer e altera suas características:

Alocando um buffer de texto

Quando o sistema cria um controle de edição, ele cria automaticamente um buffer de texto, define seu tamanho inicial e aumenta o tamanho conforme necessário. O tamanho pode ser até um limite predefinido de aproximadamente 32 kilobytes (KB) para controles de edição de linha única. Como esse limite pode mudar, ele é chamado de limite suave. Um aplicativo pode definir um limite rígido para o tamanho do buffer enviando uma mensagem de EM_SETLIMITTEXT para o controle de edição. Se o buffer exceder qualquer limite, o sistema enviará ao aplicativo um código de notificação EN_ERRSPACE . Um aplicativo pode recuperar o limite de texto atual enviando uma mensagem EM_GETLIMITTEXT.

O sistema normalmente cria um buffer de controle de edição em uma caixa de diálogo, usando memória fora do segmento de dados do aplicativo. Um aplicativo pode suprimir esse comportamento de alocação padrão e criar o buffer de seu heap local usando o estilo DS_LOCALEDIT (consulte "Estilos de modelo de caixa de diálogo" em Sobre caixas de diálogo) ao criar o controle de edição. Um aplicativo que usa o estilo DS_LOCALEDIT é responsável por todas as alocações de buffer. Para fazer a alocação inicial, um aplicativo pode chamar a função LocalAlloc e passar o identificador de buffer retornado para o controle de edição enviando-lhe uma mensagem EM_SETHANDLE. Para fazer alocações subsequentes (em resposta a um código de notificação EN_ERRSPACE, por exemplo), um aplicativo deve salvar o conteúdo do buffer atual (se necessário) e obter um novo buffer da seguinte maneira.

Para salvar o buffer atual e obter um novo, siga este procedimento.

  1. Recupere o identificador da memória atualmente alocada para o texto em um controle de edição de várias linhas enviando ao controle uma mensagem EM_GETHANDLE.
  2. Libere o buffer chamando a função LocalFree.
  3. Obtenha um novo buffer (e identificador de buffer) chamando LocalAlloc.
  4. Dê o identificador de buffer ao sistema enviando ao controle uma mensagem EM_SETHANDLE.

As mensagens EM_SETHANDLE e EM_GETHANDLE aplicam-se somente a controles de edição de várias linhas.

Um aplicativo que usa o comportamento de alocação padrão (ou seja, não usa o estilo DS_LOCALEDIT (consulte "Estilos de modelo de caixa de diálogo" em Sobre caixas de diálogo)) não deve enviar mensagens EM_SETHANDLE e EM_GETHANDLE para o controle de edição.

O envio de uma mensagem EM_SETHANDLE tem vários efeitos colaterais: ele limpa o sinalizador de desfazer (fazendo com que a mensagem EM_CANUNDO retorne zero), limpa o sinalizador de modificação (fazendo com que a mensagem EM_GETMODIFY retorne zero) e redesenha a janela de controle de edição.

Inicializando um buffer de texto

Um aplicativo pode inicializar ou reinicializar o buffer de texto de um controle de edição chamando a função SetDlgItemText . Um aplicativo pode recuperar o conteúdo de um buffer de texto chamando a função GetDlgItemText.

Tornando um buffer de texto somente leitura

Para cada controle de edição, o sistema mantém um sinalizador somente leitura que indica se o texto do controle é leitura/gravação (o padrão) ou somente leitura. Um aplicativo pode definir o sinalizador de leitura/gravação ou o sinalizador somente leitura para o texto enviando ao controle uma mensagem EM_SETREADONLY . Para determinar se um controle de edição é somente leitura, um aplicativo pode chamar a função GetWindowLong usando a constante GWL_STYLE. A mensagem EM_SETREADONLY se aplica a controles de edição de linha única e multilinha.

Alterando o retângulo de formatação

A visibilidade do texto de um controle de edição é governada pelas dimensões de seu retângulo de janela e seu retângulo de formatação. O retângulo da janela é a área do cliente da janela que contém o controle de edição. O retângulo de formatação é uma construção mantida pelo sistema para formatar o texto exibido no retângulo da janela. Quando um controle de edição é exibido pela primeira vez, os dois retângulos são idênticos na tela. Um aplicativo pode tornar o retângulo de formatação maior do que o retângulo da janela (limitando assim a visibilidade do texto do controle de edição) ou menor do que o retângulo da janela (criando assim espaço em branco extra ao redor do texto).

Um aplicativo pode definir as coordenadas do retângulo de formatação de um controle de edição enviando-lhe uma mensagem EM_SETRECT. A mensagem EM_SETRECT também redesenha automaticamente o texto do controle de edição. Para estabelecer as coordenadas do retângulo de formatação sem redesenhar o texto do controle, um aplicativo pode enviar ao controle uma mensagem EM_SETRECTNP. Para recuperar as coordenadas do retângulo de formatação, um aplicativo pode enviar ao controle uma mensagem EM_GETRECT. Essas mensagens se aplicam somente a controles de edição de várias linhas.

Editar mensagens de notificação de controle

O usuário faz solicitações de edição usando o teclado e o mouse. O sistema envia cada solicitação para a janela pai do controle de edição na forma de uma mensagem WM_COMMAND. A mensagem inclui o identificador de controle de edição na palavra de ordem baixa do parâmetro wParam, o identificador do controle de edição no parâmetro lParam e um código de notificação de controle de edição correspondente à ação do usuário na palavra de ordem alta do parâmetro wParam.

Um pedido deve examinar os códigos de notificação que acompanham cada mensagem de notificação e responder adequadamente. A tabela a seguir lista cada código de notificação de controle de edição e a ação que o gera.

Código de notificação Ação do usuário
EN_CHANGE O usuário modificou o texto em um controle de edição. O sistema atualiza a exibição antes de enviar esse código de notificação (ao contrário do EN_UPDATE).
EN_ERRSPACE O controle de edição não pode alocar memória suficiente para atender a uma solicitação específica.
EN_HSCROLL O usuário clicou na barra de rolagem horizontal do controle de edição. O sistema envia esse código de notificação antes de atualizar a tela.
EN_KILLFOCUS O usuário selecionou outro controle.
EN_MAXTEXT Ao inserir texto, o usuário excedeu o número especificado de caracteres para o controle de edição. A inserção foi truncada. Esse código de notificação também é enviado quando um controle de edição não tem o estilo ES_AUTOHSCROLL e o número de caracteres a serem inseridos excede a largura do controle de edição ou quando um controle de edição não tem o estilo ES_AUTOVSCROLL e o número total de linhas a serem inseridas excede a altura do controle de edição.
EN_SETFOCUS O usuário selecionou esse controle de edição.
EN_UPDATE O usuário alterou o texto no controle de edição e o sistema está prestes a exibir o novo texto. O sistema envia esse código de notificação depois de formatar o texto, mas antes de exibi-lo, para que o aplicativo possa redimensionar a janela de controle de edição.
EN_VSCROLL O usuário clicou na barra de rolagem vertical do controle de edição ou rolou a roda do mouse sobre o controle de edição. O sistema envia esse código de notificação antes de atualizar a tela.
EN_SEARCHWEB O usuário clicou na entrada do menu de contexto 'Pesquisar na Web'. O sistema envia essa notificação depois de iniciar o navegador.

Além disso, o sistema envia uma mensagem de WM_CTLCOLOREDIT para a janela pai de um controle de edição antes que o controle de edição seja desenhado. Essa mensagem contém um identificador do contexto de exibição (DC) do controle de edição e um identificador da janela filho. A janela pai pode usar esses identificadores para alterar as cores de texto e plano de fundo do controle de edição.

Editar processamento de mensagens padrão do controle

O procedimento de janela para a classe de janela de controle de edição predefinida executa o processamento padrão para todas as mensagens que o procedimento de controle de edição não processa. Quando o procedimento de controle de edição retorna FALSE para qualquer mensagem, o procedimento de janela predefinido verifica as mensagens e executa as seguintes ações padrão.

Mensagem Ação padrão
EM_CANUNDO Retorna TRUE se a operação de controle de edição puder ser desfeita.
EM_CHARFROMPOS Retorna o índice de caracteres e o índice de linha do caractere mais próximo do ponto especificado.
EM_EMPTYUNDOBUFFER Esvazia o buffer de desfazer e define o sinalizador de desfazer recuperado pela mensagem EM_CANUNDO como FALSE. O sistema limpa automaticamente o sinalizador de desfazer sempre que o controle de edição recebe uma mensagem WM_SETTEXT ou EM_SETHANDLE.
EM_FMTLINES Adiciona ou remove caracteres de quebra de linha suave (dois retornos de carro e um feed de linha) às extremidades de linhas quebradas em um controle de edição de várias linhas. Ele não é processado por controles de edição de linha única.
EM_GETFIRSTVISIBLELINE Retorna o índice baseado em zero do primeiro caractere visível em um controle de edição de linha única ou o índice baseado em zero da linha visível superior em um controle de edição de várias linhas.
EM_GETHANDLE Retorna um identificador que identifica o buffer que contém o texto do controle de edição de várias linhas. Ele não é processado por controles de edição de linha única.
EM_GETLIMITTEXT Retorna o limite de texto atual, em caracteres.
EM_GETLINE Copia caracteres em um controle de edição de linha única para um buffer e retorna o número de caracteres copiados. Em um controle de edição de várias linhas, recupera uma linha de texto do controle e retorna o número de caracteres copiados.
EM_GETLINECOUNT Retorna o número de linhas no controle de edição.
EM_GETMARGINS Retorna as larguras das margens esquerda e direita.
EM_GETMODIFY Retorna um sinalizador indicando se o conteúdo de um controle de edição foi modificado.
EM_GETPASSWORDCHAR Retorna o caractere que os controles de edição usam em conjunto com o estilo ES_PASSWORD.
EM_GETRECT Retorna as coordenadas do retângulo de formatação em um controle de edição.
EM_GETSEL Retorna as posições de caracteres inicial e final da seleção atual no controle de edição.
EM_GETTHUMB Retorna a posição da caixa de rolagem na barra de rolagem vertical em um controle de edição de várias linhas.
EM_GETWORDBREAKPROC Retorna o endereço da função Wordwrap atual em um controle de edição.
EM_LINEFROMCHAR Retorna o número baseado em zero da linha em um controle de edição de várias linhas que contém um índice de caracteres especificado. Esta mensagem é o inverso da mensagem EM_LINEINDEX . Ele não é processado por controles de edição de linha única.
EM_LINEINDEX Retorna o caractere de uma linha em um controle de edição de várias linhas. Esta mensagem é o inverso da mensagem EM_LINEFROMCHAR . Ele não é processado por controles de edição de linha única.
EM_LINELENGTH Retorna o comprimento, em caracteres, de um controle de edição de linha única. Em um controle de edição de várias linhas, retorna o comprimento, em caracteres, de uma linha especificada.
EM_LINESCROLL Rola o texto verticalmente em um controle de edição de linha única ou horizontalmente em um controle de edição de várias linhas (quando o controle tem o estilo ES_LEFT). O parâmetro lParam especifica o número de linhas a serem roladas verticalmente, a partir da linha atual. O parâmetro wParam especifica o número de caracteres a serem rolados, horizontalmente, a partir do caractere atual.
EM_POSFROMCHAR Retorna as coordenadas do cliente do caractere especificado.
EM_REPLACESEL Substitui a seleção atual pelo texto em um buffer fornecido pelo aplicativo, envia a janela pai EN_UPDATE e EN_CHANGE códigos de notificação e atualiza o buffer de desfazer.
EM_SCROLL Rola o texto verticalmente em um controle de edição de várias linhas. Essa mensagem é equivalente a enviar uma mensagem WM_VSCROLL para o controle de edição. Ele não é processado por controles de edição de linha única.
EM_SCROLLCARET Rola o cursor para a exibição em um controle de edição.
EM_SETFONT Sem suporte:
EM_SETHANDLE Define um identificador para a memória usada como um buffer de texto, esvazia o buffer de desfazer, redefine as posições de rolagem para zero e redesenha a janela.
EM_SETLIMITTEXT Define o número máximo de caracteres que o usuário pode inserir no controle de edição. Para controles de edição de linha única, esse valor é 0x7FFFFFFE ou o valor do parâmetro wParam, o que for menor. Para controles de edição de várias linhas, esse valor é 1 ou o valor do parâmetro wParam , o que for menor.
EM_SETMARGINS Define as larguras das margens esquerda e direita e redesenha o controle de edição para refletir as novas margens.
EM_SETMODIFY Define ou limpa o sinalizador de modificação para indicar se o controle de edição foi modificado.
EM_SETPASSWORDCHAR Define o caractere que os controles de edição usam em conjunto com o estilo ES_PASSWORD.
EM_SETREADONLY Define ou remove o estilo somente leitura (ES_READONLY) em um controle de edição.
EM_SETRECT Define o retângulo de formatação para o controle de edição de várias linhas e redesenha a janela. Ele não é processado por controles de edição de linha única.
EM_SETRECTNP Define o retângulo de formatação para o controle de edição de várias linhas, mas não redesenha a janela. Ele não é processado por controles de edição de linha única.
EM_SETSEL Seleciona um intervalo de caracteres no controle de edição definindo as posições inicial e final a serem selecionadas.
EM_SETTABSTOPS Define posições de parada de tabulação no controle de edição de várias linhas. Ele não é processado por controles de edição de linha única.
EM_SETWORDBREAKPROC Substitui a função padrão Wordwrap por uma função Wordwrap definida pelo aplicativo.
EM_UNDO Remove qualquer texto que acabou de ser inserido ou insere caracteres excluídos e define a seleção para o texto inserido. Se necessário, envia os códigos de notificação EN_UPDATE e EN_CHANGE para a janela pai.
WM_CHAR Grava um caractere no controle de edição de linha única e envia os códigos de notificação EN_UPDATE e EN_CHANGE para a janela pai. Grava um caractere no controle de edição de várias linhas. Manipula as teclas de aceleração para funções padrão, como CTRL+C para copiar e CTRL+V para colar. Em controles de edição de várias linhas, também processa pressionamentos de tecla TAB e CTRL+TAB para mover-se entre os controles em uma caixa de diálogo e inserir guias em controles de edição de várias linhas. Usa a função MessageBeep para caracteres ilegais.
WM_CLEAR Limpa a seleção atual, se houver, em um controle de edição. Se não houver seleção atual, excluirá o caractere à direita do acento circunflexo. Se o usuário pressionar a tecla SHIFT, isso cortará a seleção para a área de transferência ou excluirá o caractere à esquerda do cursor quando não houver seleção. Se o usuário pressionar a tecla CTRL, isso excluirá a seleção ou excluirá até o final da linha quando não houver seleção.
WM_COPY Copia o texto para a área de transferência, a menos que o estilo esteja ES_PASSWORD, caso em que a mensagem retorna zero.
WM_CREATE Cria o controle de edição e notifica a janela pai com TRUE para êxito ou 1 para falha.
WM_CUT Recorta a seleção para a área de transferência ou exclui o caractere à esquerda do cursor se não houver seleção.
WM_ENABLE Faz com que o retângulo seja redesenhado em cinza para controles de edição de linha única. Retorna o estado habilitado para controles de edição de linha única e multilinha.
WM_ERASEBKGND Preenche a janela de controle de edição de várias linhas com a cor atual do controle de edição.
WM_GETDLGCODE Retorna os seguintes valores: DLGC_WANTCHARS, DLGC_HASSETSEL e DLGC_WANTARROWS. Em controles de edição de várias linhas, ele também retorna DLGC_WANTALLKEYS. Se o usuário pressionar ALT+BACKSPACE, ele também retornará DLGC_WANTMESSAGE.
WM_GETFONT Retorna o identificador da fonte que está sendo usada pelo controle ou NULL se o controle usa a fonte do sistema.
WM_GETTEXT Copia o número especificado de caracteres para um buffer e retorna o número de caracteres copiados.
WM_GETTEXTLENGTH Retorna o comprimento, em caracteres, do texto em um controle de edição. O comprimento não inclui o caractere de terminação nula.
WM_HSCROLL Rola o texto em um controle de edição de várias linhas horizontalmente e manipula o movimento da caixa de rolagem.
WM_KEYDOWN Executa o processamento padrão dos códigos de chave virtual.
WM_KILLFOCUS Remove o foco do teclado de uma janela de controle de edição, destrói o acento circunflexo, oculta a seleção atual e notifica a janela pai de que o controle de edição perdeu o foco.
WM_LBUTTONDBLCLK Limpa a seleção atual e seleciona a palavra sob o cursor. Se a tecla SHIFT estiver pressionada, estende a seleção para a palavra sob o cursor.
WM_LBUTTONDOWN Altera o ponto de inserção atual. Se a tecla SHIFT estiver pressionada, estende a seleção até a posição do cursor. Nos controles de edição de várias linhas, também define o temporizador para rolar automaticamente quando o usuário mantém pressionado o botão do mouse fora da janela de controle de edição de várias linhas.
WM_LBUTTONUP Libera a captura do mouse e define o ponto de inserção de texto no controle de edição de linha única. Em um controle de edição de várias linhas, também encerra o timer definido na mensagem WM_LBUTTONDOWN.
WM_MOUSEMOVE Altera a seleção atual no controle de edição de linha única, se o botão do mouse estiver desativado. Em controles de edição de várias linhas, também define o temporizador para rolar automaticamente se o usuário mantiver pressionado o botão do mouse fora da janela de controle de edição de várias linhas.
WM_NCCREATE Ponteiro para a estrutura CREATESTRUCT da janela. Essa mensagem é enviada para a mensagem WM_CREATE quando uma janela é criada pela primeira vez.
WM_NCDESTROY Libera toda a memória associada à janela de controle de edição, incluindo o buffer de texto, o buffer de desfazer, o buffer de parada de tabulação e o pincel de realce.
WM_PAINT Apaga o plano de fundo, preenche a janela com a cor atual da janela de controle de edição, desenha a borda (se houver), define a fonte e desenha qualquer texto e mostra o cursor de inserção de texto.
WM_PASTE Cola o texto da área de transferência na janela de controle de edição na posição do acento circunflexo.
WM_SETFOCUS Define o foco do teclado de uma janela de controle de edição (mostra a seleção atual, se ela estava oculta, e cria o acento circunflexo).
WM_SETFONT Define a fonte e, opcionalmente, redesenha o controle de edição.
WM_SETTEXT Copia o texto para o controle de edição de linha única, notifica a janela pai quando há memória insuficiente, esvazia o buffer de desfazer e envia os códigos de notificação EN_UPDATE e EN_CHANGE para a janela pai. Nos controles de edição de várias linhas, também reencapsula as linhas (se necessário) e define as posições de rolagem.
WM_SIZE Define o tamanho da janela de controle de edição, garantindo que o tamanho acomoda a altura e a largura de um caractere.
WM_SYSCHAR Retorna TRUE se o usuário pressionar ALT+BACKSPACE, caso contrário, não executará nenhuma ação.
WM_SYSKEYDOWN Desfaz a última ação se o usuário pressionar ALT+BACKSPACE; caso contrário, não toma nenhuma atitude.
WM_TIMER Rola o texto na janela de controle de edição se o usuário mantém pressionado o botão do mouse fora da janela de controle de edição de várias linhas.
WM_UNDO Remove qualquer texto que acabou de ser inserido ou insere caracteres excluídos e define a seleção para o texto inserido. Se necessário, envia os códigos de notificação EN_UPDATE e EN_CHANGE para a janela pai.
WM_VSCROLL Rola um controle de edição de várias linhas verticalmente e manipula o movimento da caixa de rolagem. Ele não é processado por controles de edição de linha única.

O procedimento predefinido da janela de controle de edição passa todas as outras mensagens para a função DefWindowProc para processamento padrão.