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.
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 de
TranslateAccelerator()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 het
TranslateAccelerator()functie.
Snel toetsen in een modaal verwerken
het dialoog venster in MFC, moet u overschrijven de
CWinApp::ProcessMessageFilter()functie. Het framework oproepen
ProcessMessageFilter()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:
- 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.
- 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).
- 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.
- 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).
- Klik op Nieuw in de MenueditorAfsluitenmenu-item. Controleer of in het venster Eigenschappen van deIDeigenschap voor deAfsluitenmenu-item wordt ingesteld opID_FILE_EXIT.
- 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.
- Rechter in de Menueditor& Exit\tCTRL + E, en klik vervolgens opGebeurtenis-Handler toevoegen.
- 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.
- 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.
- Een nieuwe accelerator bron maken en koppelen de CTRL + E
toets combinatie metID_FILE_EXIT. Sla uw wijzigingen op.
- 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.
- 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.
- 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.
- Bewerken van de functie die u eerder hebt toegevoegd zodat de
de volgende code regel:
- 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.
- 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.
- 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);
}
- 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.
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
| kbacceleratorkey kbhowto kbkeyaccel kbmenu kbui kbmt KB100770 KbMtnl |
Automatische vertalingBELANGRIJK: 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
(http://support.microsoft.com/kb/100770/en-us/
)