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

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
Tento článok bol archivovaný. Je publikovaný v aktuálnej podobe a už nebude aktualizovaný.
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.

OCX kbcodesam karty háčikov dll mfcdll

Upozornenie: Tento článok bol preložený automaticky.

Vlastnosti

ID článku: 187988 – Posledná kontrola: 12/05/2015 08:49:27 – Revízia: 2.0

Microsoft Foundation Class Library 4.2

  • kbnosurvey kbarchive kbcode kbctrlcreate kbdlg kbprb kbmt KB187988 KbMtsk
Pripomienky