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

文書翻訳 文書翻訳
文書番号: 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 - 最終更新日: 2011年6月30日 - リビジョン: 4.0
キーワード:?
kbhowto kbeditctrl kbctrl kbmt KB109551 KbMtja
機械翻訳の免責
重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。
英語版 KB:109551
Microsoft Knowledge Base の免責: Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。

フィードバック

 

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