エディット コントロールでは、カスタム Wordbreak 機能を提供するには、方法

重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。

109551
この資料は、アーカイブされました。これは "現状のまま" で提供され、更新されることはありません。
概要
アプリケーションに、エディット コントロールに EM_SETWORDBREAKPROC メッセージを送信します。既定折り返す関数は、アプリケーション定義のワード ラップを交換します。関数です。既定折り返す関数は、複数行エディット内の改行します。1 文字のスペースをコントロール (MLE) です。この設定を変更するのには、アプリケーションを必要とする場合機能 (つまり、スペース以外のいくつかの文字で改行する)、[アプリケーション独自折り返す (wordbreak) 関数が必要です。
詳細
テキスト バッファーに送信するテキストがワード ラップ関数をスキャンします。表示) が、現在の最初の単語を検索行を表示します。ワード ラップ機能をこの単語の先頭に配置します。次の行を表示します。

ワード ラップ関数で Windows は、改行する必要がありますポイントを定義します。複数行エディット コントロールのテキストを通常のスペース文字します。2 つの単語を分割します。行は、MLE 内にできるように、これは変更できます。任意の文字に分割します。詳細については、EM_SETWORDBREAKPROCメッセージは、プラットフォーム 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:07 - リビジョン: 5.0

  • kbnosurvey kbarchive kbctrl kbeditctrl kbhowto kbmt KB109551 KbMtja
フィードバック