وصف الاختلافات mnemonic بين 4.0 MFC 4.0 Visual Basic

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

اضغط هنا لرابط المقالة باللغة الانجليزية145698
تمت أرشفة هذه المقالة. وتظهر "كما هي" ولن يتم تحديثها بعد الآن.
ملاحظة Microsoft Visual C++ .NET 2002 Microsoft Visual C++ .NET 2003 يدعم كل من طراز التعليمات البرمجية المدارة التي تم توفيرها من قبل Microsoft .NET Framework و نموذج التعليمات البرمجية غير المُدارة Microsoft Windows الأصلي. تنطبق المعلومات الواردة في هذه المقالة فقط على التعليمات البرمجية غير المُدارة Visual C++.يعتمد Microsoft Visual C++ 2005 نموذج التعليمات البرمجية المدارة التي تم توفيرها من قبل Microsoft .NET Framework وبصورة نموذج التعليمات البرمجية غير المُدارة Microsoft Windows الأصلي.
الأعراض
لا يعمل جدول مسرع بشرط بواسطة بطريقة COleControl::OnGetControlInfo يصف مفاتيح mnemonic عنصر تحكم OLE في كل من 4.0 MFC و Visual Basic 4.0 OLE التحكم حاويات.
السبب
4.0 Visual Basic و 4.0 MFC توفر mnemonic مختلفة معالجة التطبيقات بحيث تتطلب إدخالات جدول المسرع مختلفة.
الحل
إنشاء إدخالات جدول الذي يسمح عنصر تحكم التعليمات الرمزية القصيرة معالجة في حاوية التحكم كل 4.0 Visual Basic و MFC 4.0 OLE التسريع.
تصريح
يعتبر هذا السلوك حسب التصميم.
معلومات أخرى
يتجاوز عنصر تحكم OLE أسلوب COleControl::OnGetControlInfo ظاهري للسماح بحاويته للحصول على وصف مفاتيح mnemonic عنصر التحكم. يرجع الأسلوب OnGetControlInfo بنية تعبئة السحب من النوع CONTROLINFO يحتوي مؤشر إلى جدول مسرع بين أشياء أخرى. يتم استخدام هذا الجدول التسريع بواسطة الحاوية لإجراء عمليات فحص مفاتيح mnemonic. عندما يحدد الحاوية عنصر تحكم الخاص mnemonic ضغط مفتاح, يقوم باستدعاء IOleControl::OnMnemonic عنصر التحكم الأسلوب. يؤدي هذا إطار عمل MFC استدعاء الأسلوب COleControl::OnMnemonic الظاهري الذي يمكن تجاوز عنصر التحكم إجراء معالجة خاصة.

تطبيقات معالجة عنصر التحكم mnemonic Visual Basic 4.0 و MFC 4.0 OLE أن يكون لديك متطلبات مختلفة للإدخالات في جدول التسريع تم إرجاعها بواسطة بطريقة من OnGetControlInfo.

يتم تعريف مفتاح تسريع المستخدمة في جدول مسرع بواسطة بنية ACCEL. ACCEL تحتوي بنية التعريف التالي:
   typedef struct tagACCEL   {       BYTE   fVirt;       WORD   key;       WORD   cmd;   } ACCEL;				
عضو fVirt تعيّن إشارات التسريع. يمكن أن يكون هذا العضو تركيبة من القيم التالية:
   Value       Meaning   ---------------------------------------------------------------------   FALT        The ALT key must be held down when the accelerator key is               pressed.   FCONTROL    The CTRL key must be held down when the accelerator key               is pressed.   FNOINVERT   Specifies that no top-level menu item is highlighted when               the accelerator is used. If this flag is not specified, a               top-level menu item will be highlighted, if possible,               when the accelerator is used.   FSHIFT      The SHIFT key must be held down when the accelerator key               is pressed.   FVIRTKEY    The key member specifies a virtual-key code. If this flag               is not specified, key is assumed to specify an ASCII               character code.				
عضو المفتاح يحدد مفتاح التسريع. يمكن أن يكون هذا العضو رمز المفتاح الظاهري أو رمز حرف ASCII.

تعيين عضو cmd معرف التسريع. يتم وضع هذه القيمة في الكلمة ذو الترتيب المنخفض المعلمة wParam رسالة WM_COMMAND أو WM_SYSCOMMAND عند الضغط على المسرع.

4.0 Visual Basic يحتوي المتطلبات التالية إدخالات جدول المسرع استخدام معالجة mnemonic:

  • يجب أن يكون العضو fVirt تركيبة (FVIRTKEY | FALT) أو (FVIRTKEY | FALT | FSHIFT).
  • يجب أن يكون العضو المفاتيح كبيراً.
  • لا يجب أن يكون العضو cmd تساوي 0.
يحتوي 4.0 MFC المتطلبات التالية إدخالات جدول المسرع استخدام معالجة mnemonic:

  • يجب أن تكون عضو fVirt FALT أو 0.
  • يجب أن يكون العضو المفتاح صغيراً.
  • يتم تجاهل عضو cmd.
تختلف MFC 4.0 OLE التحكم حاويات أيضاً 4.0 أساسية مرئية في الطريقة التي يقوموا بمعالجة معالجة mnemonic عندما يكون عنصر تحكم UI النشط. عند معالجة حاويات MFC إدخال لوحة المفاتيح تحقق أولاً لمعرفة ما إذا كان OLE التحكم التركيز. إذا كان ذلك، المكالمات الإطار الأسلوب IOleInPlaceActiveObject::TranslateAccelerator الخاص بها. في COleControl تنفيذ هذا الأسلوب هو استدعاء الدالة PreTranslateMessage عنصر التحكم. في ترتيب لعنصر تحكم OLE أن الدالة التعليمات الرمزية القصيرة به بشكل صحيح عندما يكون عنصر التحكم UI النشط يجب أن تتجاوز عنصر تحكم OLE PreTranslateMessage وتحقق من وجود تركيبات المفاتيح الخاصة به.

ملاحظة: تجاوز PreTranslateMessage غير ضروري إذا تم إنشاء عنصر التحكم مع 5.0 Visual C++ أو أعلاه لأنه سيتم استدعائه OnMnemonic عندما يكون عنصر التحكم النشط قبل بطريقة من SendMnemonic في COccManager::IsDialogMessage UI.

يُظهر نموذج التعليمات البرمجية التالي متجاوزة OnGetControlInfo PreTranslateMessage و OnMnemonic السماح التعليمات الرمزية القصيرة عنصر التحكم العمل بشكل صحيح في MFC 4.0 OLE تحكم حاوية بالإضافة إلى حاوية 4.0 Visual Basic.

رمز نموذج

/* Compile options needed: None*/ #define NUM_ENTRIES 4void CMnemonicCtrl::OnGetControlInfo(LPCONTROLINFO lpi){  HACCEL hAccel = NULL;  TCHAR ch = 'm';   // Hard code the mnemonic key to 'm' for this                    // example.  ACCEL accKey[NUM_ENTRIES];  // Accel table entries 0 and 1 are to work with Visual Basic 4.0 as a  // container. Visual Basic 4.0 has the following requirements for  // accel table entries for a control's mnemonics:  //   //  (fVirt == FVIRTKEY | FALT) || (fVirt == FVIRTKEY | FALT | FSHIFT)  //  key must be uppercase  //  (cmd != 0)  accKey[0].fVirt = FVIRTKEY | FALT;  accKey[1].fVirt = FVIRTKEY | FALT | FSHIFT;  accKey[0].key = accKey[1].key = LOBYTE(VkKeyScan(ch));  accKey[0].cmd = accKey[1].cmd = 1;  // Accel table entries 2 and 3 are to work with MFC 4.0 containers.  // MFC containers have the following requirements for accel table  // entries for a control's mnemonics:  //   //  (fVirt == FALT) || (fVirt == 0)  //  key should be lowercase  //  cmd is ignored  accKey[2].fVirt = FALT;  accKey[3].fVirt = 0;  accKey[2].key = accKey[3].key = ch;  accKey[2].cmd = accKey[3].cmd = 1;  // Create the accel table.  hAccel = CreateAcceleratorTable(accKey, NUM_ENTRIES);  if (hAccel != NULL)  {    // Fill in the CONTROLINFO structure passed in.    lpi -> hAccel = hAccel;    lpi -> cAccel = NUM_ENTRIES;    lpi -> dwFlags = 0;  }  else    COleControl::OnGetControlInfo(lpi);}// NO need to override PreTranslateMessage if the control is generated in// Visual C++ 5.0 or above.BOOL CMnemonicCtrl::PreTranslateMessage( MSG * pMsg ){  // Check for ALT-M key combination.  if(pMsg->message == WM_SYSKEYDOWN) {    if((pMsg->wParam == 'm')||(pMsg->wParam == 'M'))    {      // Do mnemonic key processing here.      return TRUE;    }  }  return COleControl::PreTranslateMessage(pMsg);}void CMnemonicCtrl::OnMnemonic(LPMSG pMsg){  if ((pMsg->message == WM_SYSKEYDOWN)||      (pMsg->message == WM_SYSCHAR))  {    if ((pMsg->wParam == 'm')||(pMsg->wParam == 'M'))    {      // Do mnemonic key processing here.      return;    }  }  COleControl::OnMnemonic(pMsg);}				

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

خصائص

رقم الموضوع: 145698 - آخر مراجعة: 02/28/2014 08:01:32 - المراجعة: 5.1

Microsoft Foundation Class Library 4.2

  • kbnosurvey kbarchive kbmt kbinfo kbhowto kbtshoot kbacceleratorkey kbcode kbctrlcreate kbkeyaccel kbprb KB145698 KbMtar
تعليقات