Nasıl yapılır: Düzen denetimleri içinde özel bir Wordbreak işlev sağlar.

ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.

Makalenin İngilizcesi aşağıdaki gibidir:109551
Bu makale arşivlenmiştir. "Olduğu gibi" sunulmaktadır ve bundan sonra güncelleştirilmeyecektir.
Özet
Bir uygulama, bir uygulama tanımlı wordwrap işleviyle varsayılan wordwrap işlevini değiştirmek için bir düzenleme denetimine EM_SETWORDBREAKPROC iletiyi gönderir. Varsayılan wordwrap işlevi, bir boşluk karakteri en çok satırlı düzenleme denetiminin (MLE) bir satır ayırır. Bir uygulama bu işlevini değiştirmek gerekiyorsa (diğer bir deyişle, alan dışındaki bazı karakterinde ayırmak için), sonra da uygulamayı kendi wordwrap (wordbreak) işlevini sağlamanız gerekir.
Daha fazla bilgi
Wordwrap işlev (görüntü olarak gönderilecek metni içeren) bir metin arabelleğinde tarar geçerli görüntü satırında sığmayan ilk sözcük aranıyor. Bu sözcüğü wordwrap işlevi, ekran üzerinde bir sonraki satırın başına yerleştirir.

Wordwrap işlevi, Windows için çok satırlı düzenleme denetimlerinde, bir metin satırı genellikle iki sözcük ayıran bir boşluk karakteri kesmek noktayı tanımlar. Bir MLE satırda herhangi bir karakter bozuk olabilir, bu değiştirilebilir. EM_SETWORDBREAKPROC ileti hakkında daha fazla bilgi için Platform SDK'yı başvurun.

Aşağıda, bir çok satırlı düzenleme denetimine satır sonu gösteren örnek koddur "~" karakteri, (örneğin) (tilde) normal boşluk yerine ("") karakter.

Örnek kod, düzenleme denetimi, bir çok satırlı düzenleme denetimi olduğunu ve bir <a0>iletişim</a0> kutusunda alt denetim olduğunu varsayar.

Örnek kod

   //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;    }  }				
Yukarıdaki wordwrap (wordbreak) işlevi, uygulamanın .def dosyasına verilmesi gerekir. Işlevi değiştiren ve uygulamanın gereksinimlerine göre özelleştirilmiş.
Multi-Line

Uyarı: Bu makalenin çevirisi otomatik olarak yapılmıştır

Özellikler

Makale No: 109551 - Son İnceleme: 01/11/2015 00:50:08 - Düzeltme: 2.2

Microsoft Platform Software Development Kit - Ocak 2000 Sürümü

  • kbnosurvey kbarchive kbmt kbctrl kbeditctrl kbhowto KB109551 KbMttr
Geri bildirim