Как использовать функцию Wordbreak пользовательских элементов управления для редактирования

ВНИМАНИЕ! Данная статья переведена с использованием программного обеспечения Майкрософт для машинного перевода и, возможно, отредактирована посредством технологии Community Translation Framework (CTF). Корпорация Майкрософт предлагает вам статьи, обработанные средствами машинного перевода, отредактированные членами сообщества Майкрософт и переведенные профессиональными переводчиками, чтобы вы могли ознакомиться со всеми статьями нашей базы знаний на нескольких языках. Статьи, переведенные с использованием средств машинного перевода и отредактированные сообществом, могут содержать смысловое, синтаксические и (или) грамматические ошибки. Корпорация Майкрософт не несет ответственности за любые неточности, ошибки или ущерб, вызванные неправильным переводом контента или его использованием нашими клиентами. Подробнее об CTF можно узнать по адресу http://support.microsoft.com/gp/machine-translation-corrections/ru.

Эта статья на английском языке: 109551
Эта статья помещена в архив. Она предлагается "как есть" и обновляться не будет.
Аннотация
Приложение отправляет сообщение EM_SETWORDBREAKPROC элемента управления редактирования, чтобы заменить стандартную функцию переноса слов в функцию переноса слов, определяемый приложением. Функцию переноса слов по умолчанию разрыв строки в элементе управления многострочных полей редактирования (MLE) с символом пробела. Если приложению необходимо изменить эту функцию (то есть, переключиться на некоторых знак, отличный от пробела), то приложение должно обеспечивать собственную функцию переноса слов (wordbreak).
Дополнительная информация
Перенос слов функция проверяет буфер текста (который содержит текст на экран), поиск первое слово, которое не соответствует текущей строки. Функция переноса слов помещает это слово в начале следующей строки на экране.

Функцию переноса слов определяет точку, с которой Windows необходимо прервать строки текста для многострочных полей редактирования, обычно в пробел, разделяющий слова. Это может быть изменено таким образом, чтобы в MLE строки может быть разорвано по любой символ. Для получения дополнительных сведений о EM_SETWORDBREAKPROC сообщение обратитесь к Platform SDK.

Ниже приведен пример кода, демонстрируется разбиение строки в элементе управления многострочных полей редактирования в "~" (тильда) знаков (например) вместо обычного пробела ("") знаков.

Пример кода предполагается, что элемент управления является элементом управления многострочных полей редактирования и то, что дочерний элемент управления в диалоговом окне.

Пример программы

   //Prototype the application-defined wordbreakproc.   int CALLBACK WordBreakProc(LPSTR, int, int, int) ;   //Install wordbreakproc in the WM_INITDIALOG case.     case WM_INITDIALOG:/*    For 16 bit applications use the following line to setup your   CALLBACK function.       lpWrdBrkProc = MakeProcInstance(WordBreakProc, hInst);It is not neccessary to use MakeProcInstance in 32-bit applications.*/        //Send the EM_SETWORDBREAKPROC message to the edit control       //to install the new wordbreak procedure.        SendDlgItemMessage(hDlg, ID_EDIT, EM_SETWORDBREAKPROC, 0,                           (LPARAM)(EDITWORDBREAKPROC)lpWrdBrkProc) ;        return (TRUE);   int FAR PASCAL WordBreakProc(LPSTR lpszEditText, int ichCurrent,                                int cchEditText, int wActionCode)   {      char FAR *lpCurrentChar;      int  nIndex;      int  nLastAction;      switch (wActionCode) {        case WB_ISDELIMITER:        // Windows sends this code so that the wordbreak function can        // check to see if the current character is the delimiter.        // If so, return TRUE. This will cause a line break at the ~        // character.         if ( lpszEditText[ichCurrent] == '~' )            return TRUE;         else            return FALSE;         break;        // Because we have replaced the default wordbreak procedure, our        // wordbreak procedure must provide the other standard features in        // edit controls.       case WB_LEFT:        // Windows sends this code when the user enters CTRL+LEFT ARROW.        // The wordbreak function should scan the text buffer for the        // beginning of the word from the current position and move the        // caret to the beginning of the word.            {               BOOL bCharFound = FALSE;               lpCurrentChar = lpszEditText + ichCurrent;               nIndex = ichCurrent;               while (nIndex > 0  &&                     (*(lpCurrentChar-1) != '~' &&                      *(lpCurrentChar-1) != 0x0A) ||                     !bCharFound )              {                  lpCurrentChar = AnsiPrev(lpszEditText ,lpCurrentChar);                  nIndex--;                  if (*(lpCurrentChar) != '~' &&  *(lpCurrentChar) != 0x0A)                     // We have found the last char in the word. Continue                     // looking backwards till we find the first char of                     // the word.                    {                      bCharFound = TRUE;                      // We will consider a CR the start of a word.                      if (*(lpCurrentChar) == 0x0D)                          break;                    }               }               return nIndex;            }         break;        case WB_RIGHT:        //Windows sends this code when the user enters CTRL+RIGHT ARROW.        //The wordbreak function should scan the text buffer for the        //beginning of the word from the current position and move the        //caret to the end of the word.         for (lpCurrentChar = lpszEditText+ichCurrent, nIndex = ichCurrent;              nIndex < cchEditText;              nIndex++, lpCurrentChar=AnsiNext(lpCurrentChar))          if ( *lpCurrentChar == '~' ) {         lpCurrentChar=AnsiNext(lpCurrentChar);            nIndex++;            while ( *lpCurrentChar == '~' ) {              lpCurrentChar=AnsiNext(lpCurrentChar);              nIndex++;             }            return nIndex;          }          return cchEditText;          break;    }  }				
Выше функции переноса слов (wordbreak) должен быть экспортированы в файл .DEF приложения. Функции можно изменить и настроить в соответствии с потребностями приложения.
Многострочный

Внимание! Эта статья переведена автоматически

Свойства

Номер статьи: 109551 — последний просмотр: 01/11/2015 00:50:08 — редакция: 3.0

  • kbnosurvey kbarchive kbctrl kbeditctrl kbhowto kbmt KB109551 KbMtru
Отзывы и предложения