L'utilizzo di tasti di scelta rapida e un menu principale nella finestra di dialogo in Visual c ++

Il presente articolo è stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell’utente. Tuttavia, un articolo tradotto in modo automatico non è sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, più o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non è la sua. Microsoft non è responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell’utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.

Clicca qui per visualizzare la versione originale in inglese dell’articolo: 100770
Questo articolo è stato archiviato. L’articolo, quindi, viene offerto “così come è” e non verrà più aggiornato.
Sommario
Molte applicazioni utilizzano una finestra di dialogo modale come finestra principale dell'applicazione. Applicazioni che utilizzano questa tecnica possono anche includere un menu principale nella finestra di dialogo. Uno o più voci di menu dispone in genere, un tasto di scelta associato. In questo articolo vengono descritti i passaggi necessari per aggiungere un menu e della tastiera di scelta rapida a un'applicazione basata su casella della finestra di dialogo di creazione guidata applicazione MFC.
Informazioni
Una tipica applicazione che è sviluppata per il sistema operativo Microsoft Windows utilizzando Visual c ++ e Microsoft Windows Software Development Kit (SDK) e che utilizza tasti di scelta rapida chiama la funzione di TranslateAccelerator() nel relativo ciclo di messaggi principale. Tuttavia, quando si utilizza una finestra di dialogo modale come finestra principale, l'applicazione non dispone di un ciclo di messaggi principale; invece l'applicazione utilizza il ciclo di messaggi finestra di dialogo casella manager (incorporato in Windows) per convertire e inviare i messaggi. Naturalmente, poiché questo ciclo di messaggi non è progettato per elaborare i tasti di scelta rapida, non chiama la funzione TranslateAccelerator() .

Per elaborare le chiavi dei tasti di scelta rapida di una finestra di dialogo modale in MFC, è necessario eseguire l'override della funzione CWinApp::ProcessMessageFilter() . Il framework chiama ProcessMessageFilter() prima che elabora un messaggio.

Per la modifica un tipo di applicazione basata su casella finestra di dialogo Creazione guidata applicazione MFC in Visual c ++ .NET elaborare correttamente i tasti di scelta rapida, attenersi alla seguente procedura:
  1. In Visual Studio. NET, creare una nuova applicazione di MFC. Nel riquadro sinistro della creazione guidata applicazione MFC, scegliere Tipo di applicazione e assicurarsi che il tipo di applicazione è impostato su finestre .
  2. In visualizzazione risorse fare doppio clic sulla risorsa finestra di dialogo per aprire l'editor di risorse finestra di dialogo. L'ID di risorsa della risorsa finestra di dialogo si equivale a IDD_ MYPROJECT _DIALOG (dove MYPROJECT è il nome assegnato al progetto di applicazione è stata creata e).
  3. Con la risorsa finestra di dialogo aperta nell'editor risorse finestra di dialogo, individuare la finestra Proprietà. Modificare la finestra di dialogo proprietà Border e specificare lo stile del bordo sottile . Questo passaggio è necessario per una finestra di dialogo contenente un menu.
  4. Creare una nuova risorsa di menu che contiene una voce di livello superiore denominata & file e una voce di menu denominata & Exit\tCTRL + E (CTRL + X è in genere associate tagliare testo, quindi CTRL+A viene invece utilizzato).
  5. Nell'editor di menu fare clic sulla voce di menu Exit appena creata. Nella finestra Proprietà, assicurarsi che la proprietà ID voce di menu Esci sia impostata a ID_FILE_EXIT .
  6. Associare il nuovo menu nella finestra di dialogo, immettere l'ID di menu nella risorsa finestra di dialogo proprietà menu . Aprire l'editor di finestra di dialogo per la risorsa finestra di dialogo e individuare la proprietà menu nella finestra Proprietà. Impostare l'ID di risorsa creato per il menu nel passaggio 4. Per effettuare questa operazione, scegliere l'elenco a discesa nella riga delle proprietà menu , quindi per selezionare l'ID di risorsa per il menu dell'elenco.
  7. Per l'editor di menu, fare clic con il pulsante destro del mouse & Exit\tCTRL + E, quindi fare clic su Aggiungi gestore eventi .
  8. Eventi in Creazione guidata gestore, selezionare il tipo di messaggio di comando . Nell'elenco classe , selezionare la classe principale CDialog derivato per il gestore deve essere generato. Assicurarsi che il nome di funzione del gestore sia appropriato e quindi fare clic su Aggiungi e modifica per creare il gestore di eventi menu elemento.
  9. Inserire la riga seguente nella funzione Esci dal menu elemento metodo del gestore eventi viene generato nel passaggio 8:
    PostMessage(WM_COMMAND, IDOK, 0L);					
    questo produce lo stesso effetto facendo clic su OK quando l'utente sceglie Esci dal menu file . Fare clic su OK chiude l'applicazione di casella finestra di dialogo.

  10. Creare una nuova risorsa dei tasti di scelta rapida e associare il CTRL+E combinazione con ID_FILE_EXIT . Salvare le modifiche.
  11. Modificare il file stdafx.h per dichiarare le variabili di globale seguente dopo le istruzioni # include :
    extern HWND    ghDlg;          // Handle to main dialog box.extern HACCEL  ghAccelTable;   // Handle to accelerator table.					
  12. Nel file cpp che contiene il CWinApp implementazione della classe derivata (in genere il file cpp con lo stesso nome base come il nome del progetto), aggiungere le inizializzazioni di variabili globali seguenti:
    HWND    ghDlg = 0;          // Handle to main dialog box.HACCEL  ghAccelTable = 0;   // Handle to accelerator table.					
  13. Nel principale CDialog derivata classe (non la finestra di dialogo classe che implementa l'impostazione predefinita sulla finestra di dialogo), trovare il metodo OnInitDialog() . Se necessario, è possibile aggiungere un override del metodo OnInitDialog() . Per effettuare questa operazione, selezionare la classe CDialog derivata nella finestra Visualizzazione classi e scegliere di override nella finestra Proprietà. Individuare la riga OnInitDialog e selezionare la colonna a destra. Se non è sottoposto a override OnInitDialog() per questa classe, è possibile creare un override.
  14. Modificare la funzione aggiunto in precedenza per includere la seguente riga di codice:
    ghDlg = m_hWnd;					
  15. Nel file cpp contenente l'implementazione derivata CWinApp , trovare il metodo di classe di InitInstance() . Aggiungere la riga seguente immediatamente dopo la chiamata alla classe base CWinApp::InitInstance() :
    ghAccelTable = LoadAccelerators(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_ACCELERATOR1));					
    Nota : l'ID di risorsa utilizzata in questo esempio (IDR_ACCELERATOR1) è l'ID della risorsa tabella dei tasti di scelta rapida che viene aggiunto nel passaggio 10.

  16. Aggiungere un override alla classe derivata CWinApp per il metodo della classe ProcessMessageFilter() . A tal fine, nella finestra Visualizzazione classi, selezionare la classe derivata CWinApp nel progetto. Quindi nella finestra Proprietà fare clic su Overrides . Individuare la riga di ProcessMessageFilter nella finestra proprietà e selezionare la colonna più a destra di tale riga. Fare clic sulla freccia a discesa e scegliere l'opzione per aggiungere un override del metodo ProcessMessageFilter .
  17. Modificare l'override del metodo ProcessMessageFilter() in modo che contenga la seguente implementazione:
    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. Compilare ed eseguire l'applicazione. Si noti che disponga di un menu. Quando si scegliere Esci dal menu file o premere CTRL+A, chiusura dell'applicazione, come previsto.

Avviso: questo articolo è stato tradotto automaticamente

Proprietà

ID articolo: 100770 - Ultima revisione: 12/04/2015 09:31:21 - Revisione: 3.1

Microsoft Foundation Class Library 4.2

  • kbnosurvey kbarchive kbmt kbacceleratorkey kbhowto kbkeyaccel kbmenu kbui KB100770 KbMtit
Feedback