Die TAB-TASTE, Pfeiltasten und Zugriffstasten funktionieren nicht wie erwartet, wenn ein ActiveX-Steuerelement das übergeordnete Fenster eines nicht modalen Dialogfelds oder des ein Propertysheet-Fenster ist

Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.

Den englischen Originalartikel können Sie über folgenden Link abrufen: 187988
Dieser Artikel wurde archiviert. Er wird im vorliegenden Zustand bereitgestellt und nicht mehr aktualisiert.
Problembeschreibung
Wenn ein ActiveX-Steuerelement das übergeordnete Fenster eines nicht modalen Dialogfelds oder Propertysheet Fenster ist, erwartungsgemäß nicht die TAB-TASTE, Pfeiltasten und Zugriffstasten. Die TAB-Taste nicht Eingabe Fokus von einem Steuerelement zu einem anderen verschoben werden. Drücken der Pfeiltasten oder die Zugriffstasten im nicht modalen Dialogfeld Feld oder Propertysheet hat Fenster keine Auswirkungen.
Ursache
Das Problem ist das Steuerelement die Meldungsverteilschleife eigene nicht. Das Nachrichtensystem ist im Besitz der Containeranwendung. Daher werden alle Tastenanschläge Nachrichten wird von der Containeranwendung und nicht auf das nicht modale Dialogfeld Feld oder Propertysheet-Fenster verteilt.

Das Problem tritt nicht mit einem modalen Dialog Feld-Propertysheet-Fenster auf, da das Nachrichtensystem ist im Besitz des Dialogfeld-Feld-Managers und ihn übernimmt alle Tastenanschläge Nachrichten zu verarbeiten.
Lösung
Installieren Sie einen Windows-WH_GETMESSAGE-Hook für die nicht modales Dialogfeld Feld/Propertysheet abgeleitete Klasse, um Tastenanschläge abfangen und Behandeln von Zugriffstasten ermöglichen.
Status
Es handelt sich hierbei um ein beabsichtigtes Verhalten.
Weitere Informationen
Das folgende Beispiel zeigt eine Möglichkeit, die Windows-Installation Nachricht Hook auf eine nicht modale CPropertySheet abgeleitete Klasse:

Beispielcode

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

Schritte zum Reproduzieren des Problems

  1. Wählen Sie die MFC-ActiveX-Assistent zum Erstellen eines ActiveX-Steuerelement. Akzeptieren Sie alle Standardeinstellungen.
  2. Zeigen Sie ein nicht modales Dialogfeld Feld oder Propertysheet Fenster an, wenn innerhalb des Steuerelements auf doppelklicken.
Ergebnisse : Wenn das Fenster nicht modales Dialogfeld Feld oder Propertysheet angezeigt wird, durch Drücken der TAB-TASTE bzw. der Zugriffstasten hat keine Auswirkungen.
Informationsquellen
(c) 1998 Microsoft Corporation, alle Rechte vorbehalten. Beiträge von Yeong Kah TAM, Microsoft Corporation.

OCX Kbcodesam Registerkarten Hooks Dll mfcdll

Warnung: Dieser Artikel wurde automatisch übersetzt.

Eigenschaften

Artikelnummer: 187988 – Letzte Überarbeitung: 12/05/2015 08:49:23 – Revision: 6.1

Microsoft Foundation Class Library 4.2

  • kbnosurvey kbarchive kbmt kbcode kbctrlcreate kbdlg kbprb KB187988 KbMtde
Feedback
ERROR: at System.Diagnostics.Process.Kill() at Microsoft.Support.SEOInfrastructureService.PhantomJS.PhantomJSRunner.WaitForExit(Process process, Int32 waitTime, StringBuilder dataBuilder, Boolean isTotalProcessTimeout)