DetailPage-MSS-KB

Knowledge Base

Artikel-ID: 100770 - Geändert am: Dienstag, 21. November 2006 - Version: 3.1

 

Zusammenfassung

Viele Anwendungen verwenden ein modales Dialogfeld als das Hauptanwendungsfenster angezeigt. Anwendungen, die diese Technik können auch ein Hauptmenü im Dialogfeld enthalten. Normalerweise muss ein oder mehrere Menüelemente eine Zugriffstaste zugeordnet. Dieser Artikel beschreibt die Schritte, die für ein Menü- und Tastatureinstellungen Zugriffstasten einer MFC-Anwendungs-Assistenten Dialogfeld Feld-basierten Anwendung hinzufügen erforderlich sind.

Weitere Informationen

Eine typische Anwendung, wird mithilfe von Visual C++ und Microsoft Windows Software Development Kit (SDK) für das Betriebssystem Microsoft Windows entwickelt und Zugriffstasten verwendet, ruft die TranslateAccelerator() -Funktion in der Hauptmeldungsschleife. Wenn Sie ein modales Dialogfeld als Hauptfenster verwenden, die Anwendung nicht über eine Hauptmeldungsschleife die jedoch stattdessen die Anwendung die Meldungsschleife Dialogfeld Feld Manager (in Windows integriert) zum Übersetzen und Senden von Nachrichten verwendet. Natürlich, da diese Meldungsschleife nicht zum Verarbeiten von Zugriffstasten ausgelegt ist, wird es nicht die Funktion TranslateAccelerator() aufgerufen.

Zugriffstasten in einem modalen Dialogfeld in MFC verarbeiten möchten, müssen Sie die CWinApp::ProcessMessageFilter() -Funktion überschreiben. Das Framework ruft ProcessMessageFilter() , bevor eine Nachricht verarbeitet.

Gehen Sie folgendermaßen vor um ein Feld-basierte Anwendung Dialogfeld MFC-Anwendungs-Assistenten in Visual C++ .NET Zugriffstasten richtig verarbeiten zu ändern:
  1. Erstellen Sie in Visual Studio .NET eine neue MFC-Anwendung. Klicken Sie im linken MFC-Anwendungs-Assistenten klicken Sie auf Anwendungstyp , und vergewissern Sie sich, dass der Anwendungstyp auf Dialogfeldern basierend festgelegt ist.
  2. Doppelklicken Sie in der Ressourcenansicht auf die Dialogfeldressource, um den Dialogfeld Ressourcen-Editor öffnen. Die RESSOURCENKENNUNG des der Dialogfeldressource ähnelt IDD_ MYPROJECT _DIALOG (wobei MYPROJECT, die dem Namen gegeben haben Ihrem Anwendungsprojekt bei seiner Erstellung ist) wird.
  3. Die Dialogressource, die im Dialogfeld Ressourcen-Editor geöffnet suchen Sie im Eigenschaftenfenster. Bearbeiten Sie das Dialogfeld Border -Eigenschaft und geben Sie die Rahmenart Schmal . Diese Schritt ist erforderlich für ein Dialogfeld, das ein Menü enthält.
  4. Erstellen Sie eine neue Menüressource, die einen der obersten Ebene Namen Eintrag enthält Datei und ein Menüelement mit dem Namen & Exit\tCTRL + E (STRG + X ist Ausschneiden von Text, in der Regel zugeordnet, sodass STRG + E stattdessen verwendet wird).
  5. Klicken Sie im Menü-Editor auf das neu erstellte Menüelement Beenden . Klicken Sie im Eigenschaftenfenster stellen Sie sicher, dass die ID -Eigenschaft für das Menüelement Beenden auf ID_FILE_EXIT festgelegt ist.
  6. Ordnen Sie das neue Menü mit dem Dialogfeld, indem Sie die Menü-ID in das Dialogfeldressource Menu -Eigenschaft eingeben. Öffnen Sie Dialog-Editor für die Dialogfeldressource und suchen Sie die Menu -Eigenschaft im Eigenschaftenfenster. Legen Sie es auf die Ressource-ID, die Sie für das Menü in Schritt 4 erstellt haben. Um dies tun, klicken Sie auf die Dropdown-Liste in der Menu -Eigenschaft Zeile und wählen Sie anschließend die RESSOURCENNUMMER für das Menü in der Liste aus.
  7. In den Menü-Editor, klicken Sie mit der rechten Maustaste auf & Exit\tCTRL + E, und klicken Sie auf Ereignishandler hinzufügen .
  8. Im Wählen Sie Ereignishandler-Assistenten den Befehl Nachricht. Wählen Sie in der Liste Klassen die CDialog abgeleitete Hauptklasse für den Ereignishandler in generiert werden aus. Stellen Sie sicher, dass der Funktionsname entsprechenden Ereignishandler ist, und klicken Sie auf Hinzufügen und bearbeiten , um den Ereignishandler Menü Element zu erstellen.
  9. Fügen Sie die folgende Zeile in der Funktion Beenden im Menü Element Event Handler Method, der im Schritt 8 generiert wird:
    PostMessage(WM_COMMAND, IDOK, 0L);
    					
    diese erzeugt dieselbe Wirkung wie das Klicken auf OK klickt der Benutzer im Menü Datei auf Beenden . Klicken Sie auf OK schließt Ihr Dialogfeld im Feld Anwendung.

  10. Erstellen Sie eine neue Zugriffstaste Ressource und ordnen Sie STRG + E Tastenkombination mit ID_FILE_EXIT . Speichern Sie die Änderungen.
  11. Die Datei stdafx.h nach den # include -Anweisungen die folgenden globalen Variablen deklariert bearbeiten:
    extern HWND    ghDlg;          // Handle to main dialog box.
    extern HACCEL  ghAccelTable;   // Handle to accelerator table.
    					
  12. In der CPP-Datei, die CWinApp enthält, hinzufügen Implementierung der abgeleiteten Klasse (normalerweise die CPP-Datei mit den gleichen Basisnamen als Projekt), die folgenden globalen Variablen Initialisierungen:
    HWND    ghDlg = 0;          // Handle to main dialog box.
    HACCEL  ghAccelTable = 0;   // Handle to accelerator table.
    					
  13. Finden in main CDialog abgeleiteten Klasse (nicht die Dialogfeld Klasse, die standardmäßig über das Dialogfeld implementiert), die OnInitDialog() -Methode. Falls erforderlich, können Sie eine Überschreibung für die OnInitDialog() -Methode hinzufügen. Dazu aktivieren Sie die CDialog abgeleiteten Klasse in das Fenster Klassenansicht an, und klicken Sie im Eigenschaftenfenster Überschreibungen . Suchen der OnInitDialog Zeile und klicken Sie in der rechte Spalte. Wenn OnInitDialog() für diese Klasse nicht überschrieben wird, haben Sie die Möglichkeit zum Erstellen einer Außerkraftsetzung.
  14. Bearbeiten Sie die Funktion, die Sie zuvor, hinzugefügt die folgende Codezeile einfügen:
    ghDlg = m_hWnd;
    					
  15. Find-in die CPP-Datei, die die von CWinApp abgeleitete Implementierung enthält der InitInstance() -Klasse-Methode. Fügen Sie unmittelbar nach dem Aufruf der Basisklasse CWinApp::InitInstance() die folgende Zeile hinzu:
    ghAccelTable = LoadAccelerators(AfxGetInstanceHandle(),
    MAKEINTRESOURCE(IDR_ACCELERATOR1));
    					
    Hinweis : die Ressource-ID, hier verwendet wird (IDR_ACCELERATOR1) ist die ID des Zugriffstastentabelle, die in Schritt hinzugefügt ist 10.

  16. Eine Überschreibung der CWinApp abgeleitete Klasse für die Methode der ProcessMessageFilter() -Klasse hinzufügen. Wählen Sie die CWinApp abgeleitete Klasse in Ihrem Projekt, klicken Sie hierzu im Fenster Klassenansicht. Klicken Sie dann im Fenster Eigenschaften auf überschreibt . Suchen Sie die ProcessMessageFilter -Zeile im Fenster Eigenschaften und wählen Sie Spalte ganz rechts der Zeile. Klicken Sie auf den Dropdownpfeil, und klicken Sie dann auf die Option, um eine Überschreibung für die ProcessMessageFilter -Methode hinzuzufügen.
  17. Bearbeiten das ProcessMessageFilter() -Methode überschreiben, sodass ihm die folgende Implementierung:
    BOOL CMyProjectApp::ProcessMessageFilter(int code, LPMSG lpMsg)
           {
              if (code < 0)
                 CWinApp::ProcessMessageFilter(code, lpMsg);
    
              if (ghDlg && ghAccelTable)
                 {
                 if (::TranslateAccelerator(ghDlg, ghAccelTable, lpMsg))
                    return(TRUE);
                 }
    
             return CWinApp::ProcessMessageFilter(code, lpMsg);
          }
    					
  18. Kompilieren Sie und führen Sie die Anwendung. Beachten Sie, dass Sie ein Menü. Wenn Sie im Menü Datei auf Beenden klicken, oder drücken Sie STRG + E, schließt die Anwendung, wie erwartet.

Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Foundation Class Library 4.2, wenn verwendet mit:
    • Microsoft Visual C++ 2.0 Professional Edition
    • Microsoft Visual C++ 2.1
    • Microsoft Visual C++ 4.0 Standard Edition
    • Microsoft Visual C++ 5.0 Standard Edition
    • Microsoft Visual C++ 6.0 Service Pack 5
    • Microsoft Visual C# .NET 2002 Standard Edition
Keywords: 
kbmt kbacceleratorkey kbhowto kbkeyaccel kbmenu kbui KB100770 KbMtde
Maschinell übersetzter ArtikelMaschinell übersetzter Artikel
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: 100770  (http://support.microsoft.com/kb/100770/en-us/ )
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.
Freigeben
Weitere Supportoptionen
Microsoft Community-Supportforen
Kontaktieren Sie uns direkt
Zertifizierten Partner finden
Microsoft Store