التحكم في الحصول على مفاتيح الاختصار مثل علامة التبويب والمسافة

StackOverflow https://stackoverflow.com/questions/154547

سؤال

لدي مربع حوار يسمح للمستخدمين بتعيين مفاتيح التشغيل السريع لاستخدامها في برنامج ثلاثي الأبعاد على نظام التشغيل Windows.أنا أستخدم CHotKeyCtrl، وهو أمر جيد جدًا، لكنه لا يتعامل مع بعض المفاتيح التي يرغب المستخدمون في استخدامها - على وجه التحديد، علامة التبويب والمسافة.

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

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

المحلول

قد يكون أحد خيارات الحلول هو استخدام عنصر تحكم التحرير القياسي للمخزون مع وظيفة ربط الرسائل.

هذا من شأنه أن يسمح لك بمحاصرة لوحة المفاتيح WM_KEYDOWN الرسائل المرسلة إلى عنصر تحكم التحرير هذا.

ستبدو وظيفة الخطاف كما يلي:

    LRESULT CALLBACK MessageHook(int code, WPARAM wParam, LPMSG lpMsg)
    {
      LRESULT lResult = 0;

      if ((code >= 0) && (code == MSGF_DIALOGBOX))
      {
        if (lpMsg->message == WM_KEYDOWN)
        {
          //-- process the key down message
          lResult = 1;
        }
      }

      // do default processing if required
      if (lResult == 0)
      {
        lResult = CallNextHookEx(MessageFilterHook, code, wParam, (LPARAM)lpMsg);
      }

      return lResult;
    }

يمكن بعد ذلك إرفاق الخطاف بعنصر تحكم التحرير عندما يتم التركيز على عنصر تحكم التحرير كما يلي:

    //-- create an instance thunk for our hook callback
    FARPROC FilterProc = (FARPROC) MakeProcInstance((HOOKPROC)(MessageHook),
                                                    hInstance);
    //-- attach the message hook
    FilterHook = SetWindowsHookEx(WH_MSGFILTER, 
                                 (HOOKPROC)FilterProc, 
                                  hInstance, GetCurrentThreadId());

ويتم إزالته عندما يفقد عنصر التحكم في التحرير التركيز كما يلي:

    //-- remove a message hook
    UnhookWindowsHookEx(MessageFilterHook);

باستخدام هذا الأسلوب، سيتم إرسال كل ضغطة على المفتاح إلى الخطاف، بشرط التركيز على عنصر التحكم في التحرير.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top