Gewusst wie: Bereitstellen einer benutzerdefinierten Wordbreak-Funktion in Edit-Steuerelementen

Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.

109551
Dieser Artikel wurde archiviert. Er wird im vorliegenden Zustand bereitgestellt und nicht mehr aktualisiert.
Zusammenfassung
Eine Anwendung sendet die EM_SETWORDBREAKPROC-Nachricht an ein Bearbeitungssteuerelement, um die standardmäßige Zeilenumbruch-Funktion mit einer anwendungsdefinierten Zeilenumbruch-Funktion zu ersetzen. Die Standardfunktion Zeilenumbruch Absatzumbrüche eine Zeile in ein mehrzeiliges Bearbeitungssteuerelement (MLE) an ein Leerzeichen. Wenn eine Anwendung diese Funktionalität zu ändern muss (, bei einigen anderen Zeichen als ein Leerzeichen umgebrochen), dann die Anwendung eine eigene Funktion Zeilenumbruch (Wordbreak) bereitstellen muss.
Weitere Informationen
Eine Zeilenumbruch-Funktion durchsucht einen Textpuffer (der Text an der Anzeige enthält), nach dem ersten Wort, die nicht passen auf die aktuelle Anzeigezeile. Zeilenumbruch-Funktion platziert dieses Wort am Anfang der nächsten Zeile auf dem Bildschirm.

Eine Funktion Zeilenumbruch definiert den Punkt, an dem Windows eine der für mehrzeilige Bearbeitungssteuerelemente in der Regel an ein Leerzeichen Zeilenumbruch sollten, die zwei Wörter trennt. Dies kann geändert werden, damit die Zeile in einer MLE an einem beliebigen Zeichen unterbrochen werden kann. Weitere Informationen über die EM_SETWORDBREAKPROC-Nachricht finden Sie im Platform SDK.

Unten ist Beispielcode, das auf einen Zeilenumbruch in einem mehrzeiligen Edit-Steuerelement am veranschaulicht die "~" (Tilde) Zeichen (z. B.) anstelle der normales Leerzeichen ("") Zeichen.

Der Beispielcode wird davon ausgegangen, dass das Edit-Steuerelement ein mehrzeiliges Bearbeitungssteuerelement ist und dass ein untergeordnetes Steuerelement in einem Dialogfeld.

Beispielcode

   //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;    }  }				
Die oben genannten Zeilenumbruch (Wordbreak)-Funktion muss in der DEF-Datei der Anwendung exportiert werden. Die Funktion kann geändert und Anforderungen der Anwendung entsprechend angepasst werden.
mehrzeiligen

Warnung: Dieser Artikel wurde automatisch übersetzt

Eigenschaften

Artikelnummer: 109551 – Letzte Überarbeitung: 01/11/2015 00:50:06 – Revision: 2.2

  • Microsoft Platform Software Development Kit January 2000 Edition
  • kbnosurvey kbarchive kbmt kbctrl kbeditctrl kbhowto KB109551 KbMtde
Feedback