تخطي إلى المحتوى الرئيسي
الدعم
تسجيل الدخول باستخدام حساب Microsoft
تسجيل الدخول أو إنشاء حساب.
مرحباً،
تحديد استخدام حساب مختلف!
لديك حسابات متعددة
اختر الحساب الذي تريد تسجيل الدخول باستخدامه.

الملخص

غالبا ما تعرض التطبيقات المستندة إلى Windows مربعات حوار إدخال البيانات لطلب معلومات من المستخدمين. قد تحتوي مربعات الحوار هذه علي العديد من عناصر التحكم بالتحرير والأزرار أمرين (ضغط) ، المسمية موافق وإلغاء. مثال علي مربع حوار إدخال البيانات هو الذي يطلب معلومات شخصيه ، مثل رقم الضمان الاجتماعي ، والعنوان ، ورقم التعريف (المعرف) ، والتاريخ/الوقت ، وما إلى ذلك ، من المستخدمين. يتم إدخال كل من هذه العناصر في عنصر تحكم تحرير. بشكل افتراضي ، يتم استخدام المفتاح TAB في مربع حوار لأزاحه التركيز بين عناصر التحكم الخاصة بالتحرير. بصفتك واجهه مستخدم شائعه ، يمكن أيضا استخدام المفتاح ENTER (RETURN) للتنقل بين عناصر التحكم الخاصة بالتحرير (علي سبيل المثال ، بعد إدخال المستخدم لجزء من المعلومات ، يمكنك الضغط علي مفتاح الإدخال ENTER لنقل التركيز إلى الحقل التالي). هناك بعض الطرق لتمكين استخدام المفتاح ENTER للتنقل بين عناصر التحكم الخاصة بالتحرير. تتمثل أحدي الطرق في استخدام الWM_COMMAND ورسائل الاعلام التي تصحبها في مربع الحوار لتحرير عناصر التحكم والأزرار. يتضمن أسلوب آخر سوبكلاسينج عناصر التحكم بالتحرير. يتضمن ثالث استخدام Studio التطبيق ومعالج الفئة وإنشاء داله عضو مربع حوار جديده.

مزيد من المعلومات

الأسلوب I: (WM_COMMAND)

تستند هذه الطريقة إلى سلوك مربعات الحوار التالية ("أداره مربعات الحوار") ومعالجه التركيز في Windows. إذا كان هناك مربع حوار أو أحد عناصر التحكم الخاصة به في الإدخال ، سيؤدي الضغط علي مفتاح الإدخال إلى ان يقوم Windows بإرسال رسالة WM_COMMANDه باستخدام المعلمة إيديتيم (وبارام) إلى معرف زر الأمر إذا لم يكن مربع الحوار يحتوي علي زر أمر افتراضي ، سيتم تعيين المعلمة إيديتيم إلى إيدوك بشكل افتراضي. عندما يتلقى أحد التطبيقات الرسالة الWM_COMMANDه مع تعيين إيديتيم إلى معرف زر الأمر الافتراضي ، يظل التركيز بعنصر التحكم الذي تم التركيز عليه قبل الضغط علي المفتاح ENTER. جيتفوكوس الاتصال () في هذه المرحلة إلى إرجاع مقبض عنصر التحكم الذي كان عليه التركيز قبل الضغط علي المفتاح ENTER. بإمكان التطبيق التحقق من مقبض التحكم هذا وتحديد ما إذا كان ينتمي إلى اي من عناصر التحكم الخاصة بالتحرير في مربع الحوار. إذا كان الأمر كذلك ، سيقوم المستخدم بإدخال البيانات في أحد عناصر تحكم التحرير وبعد القيام بذلك ، والضغط علي مفتاح الإدخال ENTER. في هذه المرحلة ، يمكن للتطبيق إرسال رسالة الWM_NEXTDLGCTL إلى مربع الحوار لنقل التركيز إلى عنصر التحكم التالي. علي الرغم من ذلك ، إذا كان التركيز باستخدام أحد أزرار الأوامر (CANCEL أو موافق) ، سترجع الدالة جيتفوكوس () مقبض التحكم بالزر ، الذي يمكن لأحدها تجاهل مربع الحوار. تشبه التعليمات البرمجية الوسيطة لهذا المنطق ما يلي في اجراء مربع حوار التطبيق:

     case WM_COMMAND:     if(wParam=IDOFDEFBUTTON || IDOK) {          // User has hit the ENTER key.          hwndTest = GetFocus() ;          retVal = TesthWnd(hWndTest) ;          //Where retVal is a boolean variable that indicates whether        //the hwndTest is the handle of one of the edit controls.          if(hwndTest) {         //Focus is with an edit control, so do not close the dialog.            //Move focus to the next control in the dialog.         PostMessage(hDlg, WM_NEXTDLGCTL, 0, 0L) ;         return TRUE ;          }          else {            //Focus is with the default button, so close the dialog.            EndDialog(hDlg, TRUE) ;            return FALSE ;          }        }     break ;

الطريقة الثانية

تتضمن هذه الطريقة سوبكلاسينج/سوبيركلاسينج عنصر تحكم التحرير في مربع الحوار. بمجرد ان تكون عناصر تحكم التحرير سوبكلاسيد أو سوبيركلاسيد ، يتم إرسال كل إدخال لوحه المفاتيح إلى الاجراء "الفئة الفرعية/الفئة الsuperclass" لعنصر تحكم التحرير الذي يحتوي حاليا علي موضع الإدخال ، بغض النظر عما إذا كان مربع الحوار يحتوي علي زر أمر افتراضي ام لا. بإمكان التطبيق تعويض رسائل المفتاح السفلي (أو الحرف) ، ابحث عن المفتاح ENTER ، وقم بالمعالجة وفقا لذلك. فيما يلي نموذج لاجراء فئة فرعيه يبحث عن المفتاح ENTER:

   //*-------------------------------------------------------------------   //| Title:   //|     SubClassProc   //|   //| Parameters:   //|     hWnd            - Handle to the message's destination window   //|     wMessage        - Message number of the current message   //|     wParam          - Additional info associated with the message   //|     lParam          - Additional info associated with the message   //|   //| Purpose:   //|     This is the window procedure used to subclass the edit control.   //*---------------------------------------------------------------------   long FAR PASCAL SubProc(HWND hWnd, WORD wMessage,WORD wParam,LONG                           lParam)   {       switch (wMessage)        {             case WM_GETDLGCODE:               return (DLGC_WANTALLKEYS |                       CallWindowProc(lpOldProc, hWnd, wMessage,                                      wParam, lParam));             case WM_CHAR:             //Process this message to avoid message beeps.            if ((wParam == VK_RETURN) || (wParam == VK_TAB))              return 0;               else              return (CallWindowProc(lpOldProc, hWnd,                                        wMessage, wParam, lParam));          case WM_KEYDOWN:               if ((wParam == VK_RETURN) || (wParam == VK_TAB)) {                 PostMessage (ghDlg, WM_NEXTDLGCTL, 0, 0L);                 return FALSE;               }            return (CallWindowProc(lpOldProc, hWnd, wMessage,                                      wParam, lParam));            break ;          default:               break;        } /* end switch */ 

الطريقة 3

تشمل هذه الطريقة استخدام استوديو التطبيق والكلاسويزارد وإنشاء داله عضو مربع حوار جديده. ستسمح هذه الطريقة للمستخدم بالضغط علي المفتاح ENTER والتركيز علي الانتقال إلى عنصر تحكم التحرير التالي. إذا كان التركيز حاليا علي عنصر تحكم التحرير الأخير في مربع الحوار ، سيتم تقديم التركيز إلى عنصر تحكم التحرير الأول. أولا ، استخدم تطبيق Studio لتغيير معرف الزر موافق في مربع الحوار. السلوك الافتراضي لتطبيق Studio هو منح الزر موافق المعرف إيدوك. يجب تغيير معرف الزر "موافق" إلى قيمه أخرى ، مثل IDC_OK. يمكنك أيضا تغيير خصائص الزر موافق بحيث لا يكون بوشبوتونا افتراضيا. بعد ذلك ، استخدم كلاسويزارد لإنشاء مربع حوار جديد فونسيتون. تسميه الدالة member الجديدة شيئا مثل أونكليكيدوك. يجب ان تكون هذه الدالة مرتبطة برسالة BN_CLICKED من عنصر تحكم الIDC_OK. بمجرد اجراء ذلك ، اكتب النص الأساسي للدالة أونكليكيدوك. يجب وضع الرمز الذي ستضعه عاده في الدالة أونوك في الدالة أونكليكيدوك الجديدة ، بما في ذلك الدالة أونوك للفئة. أضف النموذج الاولي إلى ملف الراس لمربع الحوار:

   protected:      virtual void OnOK();

أضافه الدالة أونوك إلى مربع الحوار والتعليمات البرمجية كما هو موضح أدناه:

   void CMyDialog::OnOK()   {        CWnd* pwndCtrl = GetFocus();        CWnd* pwndCtrlNext = pwndCtrl;        int ctrl_ID = pwndCtrl->GetDlgCtrlID();        switch (ctrl_ID) {            case IDC_EDIT1:                pwndCtrlNext = GetDlgItem(IDC_EDIT2);                break;            case IDC_EDIT2:                pwndCtrlNext = GetDlgItem(IDC_EDIT3);                break;            case IDC_EDIT3:                pwndCtrlNext = GetDlgItem(IDC_EDIT4);                break;            case IDC_EDIT4:                pwndCtrlNext = GetDlgItem(IDC_EDIT1);                break;            case IDOK:                CDialog::OnOK();                break;            default:                break;        }        pwndCtrlNext->SetFocus();   }

هل تحتاج إلى مزيد من المساعدة؟

الخروج من الخيارات إضافية؟

استكشف مزايا الاشتراك، واستعرض الدورات التدريبية، وتعرف على كيفية تأمين جهازك، والمزيد.

تساعدك المجتمعات على طرح الأسئلة والإجابة عليها، وتقديم الملاحظات، وسماعها من الخبراء ذوي الاطلاع الواسع.

هل كانت المعلومات مفيدة؟

ما مدى رضاك عن جودة اللغة؟
ما الذي أثّر في تجربتك؟
بالضغط على "إرسال"، سيتم استخدام ملاحظاتك لتحسين منتجات Microsoft وخدماتها. سيتمكن مسؤول تكنولوجيا المعلومات لديك من جمع هذه البيانات. بيان الخصوصية.

نشكرك على ملاحظاتك!

×