Ключ TAB, клавиши со стрелками и сочетания клавиш работают неправильно, когда элемент управления ActiveX является родительским окном немодального диалогового окна или окна лист свойств

Переводы статьи Переводы статьи
Код статьи: 187988 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

В этой статье

Проблема

Когда элемент управления ActiveX является родительское окно немодальные диалоговое окно или лист свойств поля, ключ, клавиши со стрелками и сочетаний клавиш клавиши не работают должным образом. Клавиша табуляции не перемещает фокус ввода от одного элемент управления в другой. Нажатие клавиш со стрелками или клавиши быстрого доступа в немодальные диалоговое окно поле или лист свойств не оказывает влияния.

Причина

Проблема заключается в элемент управления ActiveX не владеют сообщения насос. Принадлежит конвейер сообщений приложения контейнера. Таким образом все Нажатие клавиши сообщения принимаются приложением-контейнером и не отправлено для немодального диалогового окна лист свойств или поля.

В проблема не возникает с помощью модального диалогового окна поле/лист свойств, так как конвейер сообщений является владельцем диспетчер поле диалогового окна, и он берет на себя обработку все сообщения, нажатия клавиш.

Решение

Установить обработчик Windows WH_GETMESSAGE для немодальной диалоговое окно поле/лист свойств производного класса для перехвата нажатий клавиш и Обработайте ускорителей.

Статус

Данное поведение является особенностью.

Дополнительная информация

В следующем примере показан способ установки Windows обработчик сообщений для немодального CPropertySheet производный класс:

Пример кода

   // Handle to the Windows Message hook. It can be a global variable or a
   // member variable in your CPropertySheet-derived class.
   HHOOK hHook = NULL;



   // Hook procedure for WH_GETMESSAGE hook type.
   LRESULT CALLBACK GetMessageProc(int nCode, WPARAM wParam, LPARAM lParam)
   {
      // Switch the module state for the correct handle to be used.
      AFX_MANAGE_STATE(AfxGetStaticModuleState( ));



      // If this is a keystrokes message, translate it in controls'
      // PreTranslateMessage().
      LPMSG lpMsg = (LPMSG) lParam;
      if( (nCode >= 0) &&
         PM_REMOVE == wParam &&
         (lpMsg->message >= WM_KEYFIRST && lpMsg->message <= WM_KEYLAST) &&
         AfxGetApp()->PreTranslateMessage((LPMSG)lParam) )
         {
         // The value returned from this hookproc is ignored, and it cannot
         // be used to tell Windows the message has been handled. To avoid
         // further processing, convert the message to WM_NULL before
         // returning.
         lpMsg->message = WM_NULL;
         lpMsg->lParam = 0L;
         lpMsg->wParam = 0;
         }



      // Passes the hook information to the next hook procedure in
      // the current hook chain.
      return ::CallNextHookEx(hHook, nCode, wParam, lParam);
   }



   // Declare and define the following two functions:
   BOOL CModelessPropertySheet::OnInitDialog()
   {
      CPropertySheet::OnInitDialog();

      // Install the WH_GETMESSAGE hook function.
      hHook = ::SetWindowsHookEx(
         WH_GETMESSAGE,
         GetMessageProc,
         AfxGetInstanceHandle(),
         GetCurrentThreadId());
      ASSERT (hHook);



      return TRUE;   // Return TRUE unless you set the focus to a control.
                     // EXCEPTION: OCX Property Pages should return FALSE.


   }



   void CModelessPropertySheet::OnClose()
   {
      // Uninstall the WH_GETMESSAGE hook function.
      VERIFY (::UnhookWindowsHookEx (hHook));



      CPropertySheet::OnClose();

   }
				

Действия по воспроизведению проблемы

  1. Выберите ControlWizard ActiveX MFC для создания ActiveX элемент управления. Примите параметры по умолчанию.
  2. Отображения безрежимного диалогового окна поле или лист свойств при Дважды щелкните внутри элемента управления.
РЕЗУЛЬТАТЫ: Когда показано безрежимное диалоговое окно поле или лист свойств окна Нажатие клавиши TAB или клавиш быстрого доступа не влияет.

Ссылки

(c) Корпорация Майкрософт 1998 г. все права защищены. Отчисления по Yeong-Kah Технический консультант, корпорация Майкрософт.

Свойства

Код статьи: 187988 - Последний отзыв: 4 июня 2011 г. - Revision: 4.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft Foundation Class Library 4.2 на следующих платформах
    • Microsoft Visual C++ 4.2 Enterprise Edition
    • Microsoft Visual C++ 5.0 Enterprise Edition
    • Microsoft Visual C++ 5.0 Professional Edition
    • Microsoft Visual C++ .NET 2002 Standard Edition
    • Microsoft Visual C++ .NET 2003 Standard Edition
Ключевые слова: 
kbcode kbctrlcreate kbdlg kbprb kbmt KB187988 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:187988

Отправить отзыв

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com