Het gebruik van snel toetsen en een hoofd menu in het dialoog venster Visual c++

Vertaalde artikelen Vertaalde artikelen
Artikel ID: 100770 - Bekijk de producten waarop dit artikel van toepassing is.
Alles uitklappen | Alles samenvouwen

Samenvatting

Veel toepassingen een modaal dialoog venster gebruikt als hoofd toepassingsvenster. Toepassingen die gebruikmaken van deze techniek kunnen ook een hoofd menu in het dialoog venster. Meestal een of meer van de menu-items heeft een een snel toets gekoppeld. In dit artikel worden de stappen beschreven die nodig zijn om een menu- en toetsen bord snel toetsen toevoegen aan een MFC-toepassing Wizard dialoog box-based toepassing.

Meer informatie

Een typische toepassing die is ontwikkeld voor Microsoft Besturingssysteem Windows met Visual C++ en de Microsoft Windows-Software Development Kit (SDK) en dat gebruik toetsen bord versnellers oproepen deTranslateAccelerator()functie in de hoofd bericht lus. Echter, wanneer u een modaal gebruiken Als het hoofd venster van de toepassing in het dialoog venster geen hoofd bericht lus; in plaats daarvan de toepassing gebruikmaakt van het dialoog venster vak manager berichten lus (ingebouwd in Windows) te vertalen en het verzenden van berichten. Natuurlijk, omdat dit berichten lus is niet ontworpen voor het verwerken van snel toetsen, niet wordt aangeroepen hetTranslateAccelerator()functie.

Snel toetsen in een modaal verwerken het dialoog venster in MFC, moet u overschrijven deCWinApp::ProcessMessageFilter()functie. Het framework oproepenProcessMessageFilter()voordat een bericht worden verwerkt.

Een MFC wijzigen Toepassing Wizard dialoog box-based toepassings type in Visual C++.NET-naar- correct verwerken van snel toetsen, volgt u deze stappen:
  1. In Visual Studio.NETTO, maak een nieuwe MFC-toepassing. In de linkerdeel venster van de Wizard MFC-toepassing, klikt u opType toepassing, en zorg ervoor datType toepassingis ingesteld opDialoog venster gebaseerd.
  2. In bronnen weergave, dubbelklikt u op het dialoog venster bron openen het dialoog venster resource editor. De resource-ID van het dialoog venster bron lijkt. naar IDD_MYPROJECT_DIALOG (waarbijMYPROJECTde naam die u hebt gegeven uw toepassing project hebt gemaakt).
  3. Met het dialoog venster bron openen in het dialoog venster bron Zoek het venster Eigenschappen-editor. Het dialoog venster bewerkenRandeigenschap en geef deDunRands tijl. Deze stap is vereist voor een dialoog die bevat een menu.
  4. Een nieuwe Menubron met een vermelding op het hoogste niveau maken met de naam & bestand en een menu-item met de naam & Exit\tCTRL + E (CTRL + X is meestal gekoppeld knippen, tekst, zodat u CTRL + E wordt gebruikt).
  5. Klik op Nieuw in de MenueditorAfsluitenmenu-item. Controleer of in het venster Eigenschappen van deIDeigenschap voor deAfsluitenmenu-item wordt ingesteld opID_FILE_EXIT.
  6. Het nieuwe menu in het dialoog venster koppelen door de ID menu in het dialoog venster bronMenueigenschap. Open het dialoog venster editor voor het dialoog venster resource en zoeken hetMenueigenschap in het eigenschappenvenster. Stel deze in op de resource-ID die u kunt voor het menu bij stap 4 hebt gemaakt. Klik op de vervolg keuze lijst in deMenurij eigenschappen en klik vervolgens op de resource-ID voor de menu in de lijst.
  7. Rechter in de Menueditor& Exit\tCTRL + E, en klik vervolgens opGebeurtenis-Handler toevoegen.
  8. In de gebeurtenis-Handler Wizard, selecteert u deOPDRACHTberichttype. In deKlasselijst, selecteer deCDialogafgeleide hoofd klasse voor de handler worden gegenereerd. Zorg ervoor dat de naam van de functie-handler geschikt is en klik vervolgens opToevoegen en bewerkenhet menu-item gebeurtenis-handler maken.
  9. Voeg de volgende regel in de functieAfsluitenmenu item event handler methode die in stap 8 wordt gegenereerd:
    PostMessage(WM_COMMAND, IDOK, 0L);
    					
    Dit resulteert in hetzelfde effect als klikken opOKWanneer de gebruikerAfsluitenop deBestandmenu. Te klikken opOKSluit het dialoog venster vak toepassing.

  10. Een nieuwe accelerator bron maken en koppelen de CTRL + E toets combinatie metID_FILE_EXIT. Sla uw wijzigingen op.
  11. Bewerk het bestand Stdafx.h de volgende globale declareren variabelen na de# includeinstructies:
    extern HWND    ghDlg;          // Handle to main dialog box.
    extern HACCEL  ghAccelTable;   // Handle to accelerator table.
    					
  12. In het bestand. cpp met deCWinApp-implementatie van afgeleide klasse (meestal de. cpp bestand met dezelfde basis naam als de naam van het project), de volgende globale variabele toevoegen Identifiers:
    HWND    ghDlg = 0;          // Handle to main dialog box.
    HACCEL  ghAccelTable = 0;   // Handle to accelerator table.
    					
  13. In het hoofdCDialogafgeleide klasse (niet het dialoog venster klasse waarmee de standaardOverhet dialoog venster), vinden deOnInitDialog()methode. Indien nodig, kunt u toevoegen een overschrijving voor deOnInitDialog()methode. Klik hiervoor op deCDialogafgeleide klasse in de klasse weergave venster en klik opOverschrijvingenin het venster Eigenschappen. Zoek deOnInitDialogrij en klikt u op de rechter kolom. AlsOnInitDialog()niet wordt overschreven voor deze klasse, hebt u de mogelijkheid om te maken een overschrijving.
  14. Bewerken van de functie die u eerder hebt toegevoegd zodat de de volgende code regel:
    ghDlg = m_hWnd;
    					
  15. In het bestand. cpp met deCWinApp-afgeleid van implementatie, vinden deInitInstance()klasse methode. Voeg de volgende regel direct na de aanroep aan de basis klasseCWinApp::InitInstance():
    ghAccelTable = LoadAccelerators(AfxGetInstanceHandle(),
    MAKEINTRESOURCE(IDR_ACCELERATOR1));
    					
    OPMERKING: De resource-ID waarmee Hier wordt de ID (IDR_ACCELERATOR1) van de tabel resource accelerator die is toegevoegd in stap 10.

  16. Toevoegen van een overschrijving naar deCWinApp-afgeleide klasse voor deProcessMessageFilter()klasse methode. Selecteer hiervoor in het venster klasse weergave deCWinApp-afgeleide klasse in uw project. Klik in het venster Eigenschappen Klik opOverschrijvingen. Zoek deProcessMessageFilterrij in het venster Eigenschappen en selecteer de meest rechtse kolom van die rij. Klik op de vervolg keuze pijl en klik vervolgens op de optie toevoegen een negeren voor deProcessMessageFiltermethode.
  17. Bewerken deProcessMessageFilter()methode overschrijven zodat er de volgende uitvoering:
    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. Compileren en uitvoeren van de toepassing. Houd er rekening mee dat er een menu. Wanneer u klikt opAfsluitenop deBestandmenu of druk op CTRL + E, sluit u de toepassing, als verwacht.

Eigenschappen

Artikel ID: 100770 - Laatste beoordeling: donderdag 5 juli 2012 - Wijziging: 3.0
De informatie in dit artikel is van toepassing op:
  • Microsoft Foundation Class Library 4.2 op de volgende platformen
    • Microsoft Visual C++ 2.1
    • Microsoft Visual C++ 4.0 Standard Edition
    • Microsoft Visual C# .NET 2002 Standard Edition
Trefwoorden: 
kbacceleratorkey kbhowto kbkeyaccel kbmenu kbui kbmt KB100770 KbMtnl
Automatisch vertaald artikel
BELANGRIJK: Dit artikel is vertaald door de vertaalmachine software van Microsoft in plaats van door een professionele vertaler. Microsoft biedt u professioneel vertaalde artikelen en artikelen vertaald door de vertaalmachine, zodat u toegang heeft tot al onze knowledge base artikelen in uw eigen taal. Artikelen vertaald door de vertaalmachine zijn niet altijd perfect vertaald. Deze artikelen kunnen fouten bevatten in de vocabulaire, zinsopbouw en grammatica en kunnen lijken op hoe een anderstalige de taal spreekt en schrijft. Microsoft is niet verantwoordelijk voor onnauwkeurigheden, fouten en schade ontstaan door een incorrecte vertaling van de content of het gebruik ervan door onze klanten. Microsoft past continue de kwaliteit van de vertaalmachine software aan door deze te updaten.
De Engelstalige versie van dit artikel is de volgende: 100770

Geef ons feedback

 

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