كيفية توفير دالة Wordbreak مخصص في عناصر تحرير

هام: تمت ترجمة هذا المقال باستخدام برنامج ترجمة آلية لشركة مايكروسوفت بدلاً من الاستعانة بمترجم بشري. تقدم شركة مايكروسوفت كلاً من المقالات المترجمة بواسطة المترجمين البشر والمقالات المترجمة آليًا وبالتالي ستتمكن من الوصول إلى كل المقالات الموجودة في قاعدة المعرفة الخاصة بنا وباللغة الخاصة بك. بالرغم من ذلك، فإن المقالة المترجمة آليًا لا تكون دقيقة دائمًا وقد تحتوي على أخطاء إملائية أو لغوية أو نحوية، مثل تلك الأخطاء الصادرة عن متحدث أجنبي عندما يتحدث بلغتك. لا تتحمل شركة مايكروسوفت مسئولية عدم الدقة أو الأخطاء أو الضرر الناتج عن أية أخطاء في ترجمة المحتوى أو استخدامه من قبل عملائنا. تعمل شركة مايكروسوفت باستمرار على ترقية برنامج الترجمة الآلية

اضغط هنا لرابط المقالة باللغة الانجليزية109551
تمت أرشفة هذه المقالة. وتظهر "كما هي" ولن يتم تحديثها بعد الآن.
الموجز
إرسال أحد تطبيقات الرسالة EM_SETWORDBREAKPROC إلى عنصر تحكم تحرير لاستبدال الدالة wordwrap الافتراضية دالة معرفة من قبل التطبيق wordwrap. فواصل الدالة wordwrap الافتراضية خط في عنصر تحكم تحرير متعدد الأسطر (MLE) في مسافة. إذا احتاج أحد تطبيقات لتغيير هذه الوظيفة (أي، فصل في بعض الأحرف غير مسافة) ، ثم يجب أن توفر التطبيق الدالة wordwrap (wordbreak) الخاصة به.
معلومات أخرى
تقوم دالة wordwrap بمسح المخزن مؤقت للنص (والتي تحتوي على نص ليتم إرسالها إلى العرض) البحث عن الكلمة الأولى التي لا تلائم على السطر العرض الحالي. وضع دالة wordwrap هذه الكلمة في بداية السطر التالي على شاشة العرض.

تعريف دالة wordwrap النقطة التي عندها Windows يجب فصل سطر من النص لعناصر تحكم التحرير متعدد الأسطر عادةً عند مسافة يفصل بين كلمتين. يمكن تغيير هذا بحيث يمكن أن يكون السطر في MLE المقطوعة في أي حرف. للحصول على مزيد من المعلومات حول رسالة EM_SETWORDBREAKPROC الرجاء الرجوع إلى Platform 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;    }  }				
يحتاج الدالة wordwrap (wordbreak) أعلاه ليتم تصديرها في ملف .DEF التطبيق. يمكن تعديل الدالة وإعادة مخصصة استناداً إلى متطلبات التطبيق.
متعدد الأسطر

تحذير: تمت ترجمة هذه المقالة تلقائيًا

خصائص

رقم الموضوع: 109551 - آخر مراجعة: 01/11/2015 00:50:06 - المراجعة: 2.2

Microsoft Platform Software Development Kit-January 2000 Edition

  • kbnosurvey kbarchive kbmt kbctrl kbeditctrl kbhowto KB109551 KbMtar
تعليقات