Jak používat hlavní nabídky a klávesové zkratky v dialogovém okně v jazyce C++

Překlady článku Překlady článku
ID článku: 100770 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Souhrn

Mnoho aplikací modální dialogové okno použít jako okno hlavní aplikace. Aplikace, které používají tento postup může také obsahovat hlavní nabídky v dialogovém okně. Klávesové zkratky přidružen má obvykle jeden nebo více položek nabídky. Tento článek popisuje kroky, které jsou požadovány k přidání nabídky a klávesové zkratky aplikace založené na poli dialogové okno Průvodce aplikací MFC.

Další informace

Typická aplikace, které je vyvinuté pomocí Visual C++ a Microsoft Windows Software Development Kit (SDK) pro operační systém Microsoft Windows a který používá klávesové zkratky volání funkce TranslateAccelerator() v jeho smyčka hlavní zpráv. Však při použití modální dialogové okno jako hlavní okno aplikace nemá smyčka hlavní zpráv; místo toho aplikace přeložit a odeslat zprávy používá smyčka dialogové okno pole Správce zpráv (integrovaných do systému Windows). Samozřejmě protože tento smyčka zpráv není určen ke zpracování akcelerátory, jej nevyvolá funkci TranslateAccelerator().

Zpracovat klávesové zkratky v modálním dialogovým oknem v MFC musí přepsat funkci CWinApp::ProcessMessageFilter(). Rámec volání ProcessMessageFilter() před zpracuje zprávu.

Chcete-li změnit typ aplikace založené na poli dialogové okno Průvodce aplikací MFC v Visual C++ .NET správně zpracovat klávesové zkratky, postupujte takto:
  1. V aplikaci Visual Studio .NET vytvářet nové aplikace MFC. V levém podokně Průvodci aplikace MFC klepněte na Typ aplikace a přesvědčte se, zda Typ aplikace je nastavena na základě dialog.
  2. V zobrazení zdrojů poklepejte na zdroj dialogové okno otevřete dialogové okno editor prostředku. ID zdroje prostředku dialogového okna je podobný IDD_ MYPROJECT _DIALOG (MYPROJECT je název přiřadil projektu aplikace, když jste vytvořili).
  3. S prostředkem dialogové okno otevřít v dialogovém okně editor prostředku vyhledejte okno Vlastnosti. Upravit dialogové okno Vlastnosti ohraničení a určit styl ohraničení Tenký. Tento krok je nutný pro dialogové okno obsahující nabídky.
  4. Vytvoření nového prostředku nabídce, která obsahuje nejvyšší úrovně položku s názvem & soubor a nabídce položka s názvem & Exit\tCTRL + E (CTRL + X je obvykle přidruženy k vyjmutí textu, takže místo toho použít kombinaci kláves CTRL + E).
  5. V editoru nabídce klepněte na položku nově vytvořené nabídky Konec. V okně Vlastnosti ujistěte, že je vlastnost ID pro položku nabídky Konec nastavena ID_FILE_EXIT.
  6. Nová nabídka přidružit dialogové okno zadáním ID nabídky v dialogovém okně prostředku vlastnost nabídky. Otevřete dialogové okno editor pro prostředek dialogové okno a najít vlastnost nabídky v okně Vlastnosti. Nastavte ji na ID zdroje, které jste vytvořili pro nabídky v kroku 4. Chcete-li to provést, klepněte na rozevírací seznam v řádku nabídek vlastnost a klepněte v seznamu vyberte ID zdroje v nabídce.
  7. V nabídce editor, klepněte pravým tlačítkem myši & Exit\tCTRL + E a potom klepněte na tlačítko Přidat Obsluha událostí.
  8. V událostí popisovač průvodce vyberte typ zprávy COMMAND. Hlavní třída CDialog odvozené pro obsluhu generované v vyberte v seznamu třídy. Zkontrolujte, zda je příslušný název obslužné rutiny funkce a potom klepněte na tlačítko Přidat a upravit vytvořit obslužnou rutinu události položky nabídky.
  9. Vložte následující řádek funkce Konec nabídky událostí popisovač metodu zboží, který je generován v kroku 8:
    PostMessage(WM_COMMAND, IDOK, 0L);
    					
    to vytváří stejný účinek jako klepnutí na tlačítko OK, pokud uživatel klepne v nabídce soubor, Konec. Klepnutím na tlačítko OK zavře dialogové okno aplikace pole.

  10. Vytvoření nového prostředku akcelerátory a přidružit CTRL + E klíč kombinaci s ID_FILE_EXIT. Uložte provedené změny.
  11. Upravte soubor Stdafx.h následující globální proměnné deklarovat po příkazy # include:
    extern HWND    ghDlg;          // Handle to main dialog box.
    extern HACCEL  ghAccelTable;   // Handle to accelerator table.
    					
  12. V souboru cpp, který obsahuje CWinApp implementaci odvozené třídy (obvykle cpp soubor s základní stejný název jako název projektu), přidat následující globální proměnné initializations:
    HWND    ghDlg = 0;          // Handle to main dialog box.
    HACCEL  ghAccelTable = 0;   // Handle to accelerator table.
    					
  13. V hlavním CDialog odvozené třídy (není dialogové okno třídy, která implementuje výchozí dialogovém okně O), vyhledejte metodu OnInitDialog(). V případě potřeby můžete přidat přepsání pro metodu OnInitDialog(). To provedete klepnutím vyberte v okně zobrazení třídy CDialog odvozené třídy a klepněte na tlačítko přepíše v okně Vlastnosti. Najít OnInitDialog řádek a klepněte na tlačítko v pravém sloupci. OnInitDialog() není pro tuto třídu přepsáno, máte možnost vytvořit přepsání.
  14. Upravit funkce, které jste přidali dříve zahrnout následující řádek kódu:
    ghDlg = m_hWnd;
    					
  15. V souboru cpp obsahující implementaci odvozené CWinApp vyhledejte metodu třídy InitInstance(). Přidejte následující řádek okamžitě po volání základní třídy CWinApp::InitInstance():
    ghAccelTable = LoadAccelerators(AfxGetInstanceHandle(),
    MAKEINTRESOURCE(IDR_ACCELERATOR1));
    					
    Poznámka: ID zdroje, které zde je použit (IDR_ACCELERATOR1) je ID tabulky zdrojů akcelerátory, která je přidána v kroku 10.

  16. Přidat přepsání CWinApp odvozené třídy pro metodu třídy ProcessMessageFilter(). To provést v okně třídy zobrazení, vyberte CWinApp odvozené třídy v projektu. V okně Vlastnosti klepněte přepíše. Najít ProcessMessageFilter řádek v okně Vlastnosti a vyberte sloupec vpravo většinu daný řádek. Klepněte na rozevírací šipku a potom klepněte na možnost přidat přepsání pro metodu ProcessMessageFilter.
  17. Upravit metodu přepsání ProcessMessageFilter(), že má následující implementaci:
    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. Kompilace a spuštění aplikace. Všimněte si, že obsahuje nabídku. Klepněte na příkaz Konec v nabídce soubor nebo stiskněte kombinaci kláves CTRL + E aplikace zavřete, očekávaným způsobem.

Vlastnosti

ID článku: 100770 - Poslední aktualizace: 21. listopadu 2006 - Revize: 3.1
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft Foundation Class Library 4.2 na těchto platformách
    • 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
Klíčová slova: 
kbmt kbacceleratorkey kbhowto kbkeyaccel kbmenu kbui KB100770 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:100770

Dejte nám zpětnou vazbu

 

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