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

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 109551 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Alles erweitern | Alles schließen

Auf dieser Seite

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.

Eigenschaften

Artikel-ID: 109551 - Geändert am: Montag, 11. Juli 2005 - Version: 2.2
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Platform Software Development Kit January 2000 Edition
Keywords: 
kbmt kbctrl kbeditctrl kbhowto KB109551 KbMtde
Maschinell übersetzter Artikel
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.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 109551
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com