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

Traduzione articoli Traduzione articoli
Identificativo articolo: 100770 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

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.

ProprietÓ

Identificativo articolo: 100770 - Ultima modifica: martedý 21 novembre 2006 - Revisione: 3.1
Le informazioni in questo articolo si applicano a:
  • Microsoft Foundation Class Library 4.2áalle seguenti piattaforme
    • 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
Chiavi:á
kbmt kbacceleratorkey kbhowto kbkeyaccel kbmenu kbui KB100770 KbMtit
Traduzione automatica articoli
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
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

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