Como usar informações de quebra de linha e do Word

Um controle de edição avançado chama uma função chamada procedimento de quebra de palavras para localizar quebras entre palavras e determinar onde ele pode quebrar linhas. O controle usa essas informações ao executar operações de quebra automática de texto e ao processar combinações de teclas CTRL + SETA PARA A ESQUERDA e CTRL + SETA PARA A DIREITA. Um aplicativo pode enviar mensagens para um controle de edição avançado para substituir o procedimento padrão de quebra de palavras, recuperar informações de quebra de palavras e determinar em qual linha um determinado caractere se enquadra.

O que você precisa saber

Tecnologias

Pré-requisitos

  • C/C++
  • Programação da interface do usuário do Windows

Instruções

Usar informações de quebra de linha e Word

Os procedimentos de quebra de palavra para controles de edição avançada são semelhantes aos dos controles de edição, mas têm recursos adicionais: os procedimentos de quebra de palavra para ambos os tipos de controles podem determinar se um caractere é um delimitador e podem encontrar a quebra de palavra mais próxima antes ou depois da posição especificada. Um delimitador é um caractere que marca o final de uma palavra, como um espaço. Normalmente, em um controle de edição, uma quebra de palavra ocorre somente após delimitadores. No entanto, regras diferentes se aplicam à maioria das línguas asiáticas.

Os procedimentos de quebra de palavra para controles de edição avançada também agrupam caracteres em classes de caracteres, cada uma identificada por um valor no intervalo 0x00 a 0x0F. As quebras ocorrem após delimitadores ou entre caracteres de classes diferentes. Assim, um procedimento de quebra de palavras com classes diferentes para caracteres alfanuméricos e de pontuação encontraria duas quebras de palavras na cadeia de caracteres "Win.doc" (antes e depois do período).

A classe de um caractere pode ser combinada com zero ou mais sinalizadores de quebra de palavra para formar um valor de 8 bits. Ao executar operações de quebra automática de linha, um controle de edição avançado usa sinalizadores de quebra de palavra para determinar onde ele pode quebrar linhas. O Rich Edit usa os seguintes sinalizadores de quebra de palavra.

Sinalizador Descrição
WBF_BREAKAFTER As linhas podem ser quebradas após o caractere.
WBF_BREAKLINE O personagem é um delimitador. Os delimitadores marcam as extremidades das palavras. As linhas podem ser quebradas após os delimitadores.
WBF_ISWHITE O caractere é um caractere de espaço em branco. Os caracteres de espaço em branco à direita não são incluídos no comprimento de uma linha durante a quebra.

 

O valor WBF_BREAKAFTER é usado para permitir a quebra automática de divisas após um caractere que não marca o final de uma palavra, como um hífen.

Você pode substituir o procedimento de quebra de palavra padrão para um controle de edição avançado por seu próprio procedimento usando a mensagem EM_SETWORDBREAKPROC. Para obter mais informações sobre procedimentos de quebra de palavra, consulte a descrição da função EditWordBreakProc.

Observação

Essa substituição não é recomendada para o Microsoft Rich Edit 2.0 e posterior, devido à complexidade da quebra de palavras multilíngue.

 

Para o Microsoft Rich Edit 1.0, você pode usar a mensagem EM_SETWORDBREAKPROCEX para substituir o procedimento de quebra de palavra estendido padrão com uma função EditWordBreakProcEx. Essa função fornece informações adicionais sobre o texto, como o conjunto de caracteres. Você pode usar a mensagem EM_GETWORDBREAKPROCEX para recuperar o endereço do procedimento de quebra de palavra estendido atual. Observe que o Microsoft Rich Edit 2.0 e posterior não oferecem suporte a EditWordBreakProcEx, EM_GETWORDBREAKPROCEX e EM_SETWORDBREAKPROCEX.

Você pode usar a mensagem EM_FINDWORDBREAK para localizar quebras de palavras ou para determinar a classe de um caractere e sinalizadores de quebra de palavra. Por sua vez, o controle chama seu procedimento de quebra de palavras para obter as informações solicitadas.

Para determinar em qual linha um determinado caractere recai, você pode usar a mensagem EM_EXLINEFROMCHAR.

Usando controles de edição avançada

Demonstração de controles comuns do Windows (CppWindowsCommonControls)