Kláves TAB, kurzorové klávesy a klávesy akcelerátora nefungujú podľa očakávania, keď ovládací prvok ActiveX je rodičovské okno sú nemodálne dialógové okno alebo okno propertysheet

Preklady článku Preklady článku
ID článku: 187988 - Zobraziť produkty, ktorých sa tento článok týka.
Rozbaliť všetko | Zbaliť všetko

Na tejto stránke

PRIZNAKY

Keď ovládací prvok ActiveX je rodičovské okno Nemodálny dialógové okno pole alebo propertysheet, kartu kľúč, kurzorové klávesy a akcelerátora kľúče nefungujú podľa očakávania. Kláves TAB nepresúva vstupné zameranie z jedného kontrolu do druhého. Stlačením klávesy so šípkami alebo skratky v Nemodálny dialógové okno pole alebo propertysheet nemá žiadny vplyv.

PRICINA

Problém je ovládací prvok ActiveX nemá vlastný správy čerpadlo. Správa čerpadlo je vo vlastníctve kontajnerovej aplikácii. Preto všetky stlačenie klávesu správy prijímajú kontajnerovej aplikácii a nie expedované do okna sú nemodálne dialógovom okne blok alebo propertysheet.

V problém sa nevyskytuje pri Modálne dialógové okno pole/propertysheet, pretože správa čerpadlo je vo vlastníctve manažér dialógové okno pole a sa stará o manipuláciu všetky správy stlačenie klávesu.

RIESENIE

Inštalácia systému Windows WH_GETMESSAGE háku pre Nemodálny dialógové okno pole/propertysheet odvodené triedy umožňuje zachytiť úderov a Popisovač urýchľovače.

STAV

Toto správanie je predvolené.

DALSIE INFORMACIE

Nasledujúce vzorka ukazuje spôsob, ako nainštalovať Windows správa háku sú nemodálne CPropertySheet-odvodené triedy:

Vzorky kód

   // 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();

   }
				

Kroky na reprodukovanie problému

  1. Vyberte MFC ActiveX ControlWizard vytvoriť prvok ActiveX kontrola. Akceptovať všetky predvolené nastavenia.
  2. Zobrazte sú nemodálne dialógovom okne blok alebo propertysheet pri dvojitým kliknutím na ovládacom prvku.
VÝSLEDKY: Keď je zobrazená sú nemodálne dialógové okno pole alebo propertysheet, stlačením klávesu TAB alebo skratky nemá žiadny vplyv.

ODKAZY

(c) Microsoft Corporation 1998, všetky práva vyhradené. Príspevky Yeong-Kah Tam, Microsoft Corporation.

Vlastnosti

ID článku: 187988 - Posledná kontrola: 19. októbra 2011 - Revízia: 2.0
Informácie v tomto článku sa týkajú nasledujúcich produktov:
  • Microsoft Foundation Class Library 4.2, pri použití s produktom:
    • 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
Kľúčové slová: 
kbcode kbctrlcreate kbdlg kbprb kbmt KB187988 KbMtsk
Strojovo preložené
DÔLEŽITÉ: Tento článok bol preložený pomocou softvéru na strojový preklad od spoločnosti Microsoft, nie prekladateľom. Spoločnosť Microsoft ponúka články preložené prekladateľmi aj strojovo preložené články, vďaka čomu máte možnosť prístupu ku všetkým článkom databázy Knowledge Base vo svojom jazyku. Strojovo preložený článok však nie je vždy perfektný. Môže obsahovať chyby týkajúce sa slovnej zásoby, syntaxe alebo gramatiky, podobne ako cudzinec môže robiť chyby, keď rozpráva vašim jazykom. Spoločnosť Microsoft nenesie zodpovednosť za akékoľvek nepresnosti, chyby alebo škody spôsobené akýmkoľvek nepresným prekladom obsahu alebo jeho použitím zo strany zákazníkov. Spoločnosť Microsoft softvér na strojový preklad pravidelne aktualizuje.
Pokiaľ chcete vidieť anglickú verziu článku, kliknite sem:187988

Odošlite odozvu

 

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