Kısayol tuşları ve ana menüsü Visual C++ iletişim kutusunda nasıl kullanılır

Makale çevirileri Makale çevirileri
Makale numarası: 100770 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Özet

Birçok uygulama, kalıcı bir iletişim kutusu ana uygulama penceresi kullanın. Bu tekniği kullanan uygulamalar, ana menü iletişim kutusunda da içerebilir. Genellikle, bir veya daha fazla menü öğelerinin kendisiyle ilişkilendirilmiş bir klavye kısayol tuşu var. Bu makalede, MFC Uygulaması Sihirbazı iletişim kutusu tabanlı bir uygulama için bir menü ve klavye hızlandırıcıları eklemek için gereken adımları açıklar.

Daha fazla bilgi

Visual C++ ve Microsoft Windows Software Development Kit'e (SDK) kullanarak, Microsoft Windows işletim sistemi için geliştirdiği ve klavye hızlandırıcıları kullanan normal bir uygulama, kendi ana ileti döngüsünü TranslateAccelerator() işlevini çağırır. Ancak, kalıcı bir iletişim kutusu, ana pencere olarak kullandığınızda, uygulamanın ana iletinin bir döngü yok; bunun yerine, çevirmek ve iletileri gönderme (Windows'da yerleşik) iletişim kutusu yöneticisini ileti döngüsü uygulama kullanır. Tabii ki bu ileti döngüsü hızlandırıcıları işlemek için tasarlanmış nedeniyle TranslateAccelerator() işlevini çağırmaz.

MFC bir kalıcı iletişim kutusuna kısayol tuşları işlemek için <a0></a0>, CWinApp::ProcessMessageFilter() işlevi geçersiz kılmak gerekir. Bu ileti işleme önce çerçeve ProcessMessageFilter() çağırır.

Bir kısayol tuşları doğru olarak işlemek için Visual C++ .NET MFC Uygulaması Sihirbazı iletişim kutusu tabanlı uygulama türünü değiştirmek için şu adımları izleyin:
  1. Visual Studio. NET'te, yeni bir MFC uygulaması oluşturun. MFC Uygulaması Sihirbazı'nın sol bölmesinde, Uygulama türü ' nü tıklatın ve sonra uygulama türüiletişim göre ayarlandığından emin olun.
  2. Kaynak görünümünde iletişim kaynak iletişim Kaynak Düzenleyicisi'ni açmak için çift tıklatın. Iletişim kaynağının kaynak KIMLIĞI (MYPROJECT uygulama projenizi oluşturduğunuz zaman verdiğiniz adı olduğu) için IDD_ MYPROJECT _DIALOG benzer.
  3. Kaynak Düzenleyicisi iletişim açık iletişim kaynakla Properties penceresinde bulun. Iletişim kutusu Kenarlık özelliği düzenlemek ve ince kenarlık stilini belirtin. Bir menüyü içeren bir iletişim kutusu, bu adım gereklidir.
  4. Adında bir üst düzey girişini içeren yeni bir menü kaynak & ve bir maddenin adlı menü & Exit\tCTRL + E oluşturma (Bunun yerine CTRL + E kullanılan CTRL + X genellikle metin kesme ile ilişkili olduğundan).
  5. Menü Düzenleyicisi içinde yeni oluşturulan Çıkış menü öğesini tıklatın. Properties penceresinde Exit menü öğesinin KIMLIĞI özelliği için ID_FILE_EXIT ayarlandığından emin olun.
  6. Yeni menü, menü özelliği iletişim kaynak menü KIMLIĞI girerek iletişim kutusu ile ilişkilendirin. Kaynak iletişim için iletişim düzenleyicisini açın ve menü özelliği Properties penceresinde bulabilirsiniz. Menü 4. adımda oluşturduğunuz kaynak KIMLIĞI ayarlayın. Bunu yapmak için <a0></a0>, menüsü özelliği satır aşağı açılan listesinde tıklatın ve sonra listede menüsü kaynak KODU seçmek için tıklatın.
  7. Menü Düzenleyicisi, <a1>sağ</a1> & Exit\tCTRL + E ve Olay işleyicisi Ekle</a1>'ı tıklatın.
  8. Olay işleyicisi Sihirbazı'nı tıklatın, KOMUT ileti türü seçin. Sınıf listesi içinde türetilmiş CDialog ana sınıfı olarak yaratılacak işleyicisi için seçin. Işlev işleyicinin adı uygun olduğundan emin olun ve sonra menü maddesi olay işleyicisi oluşturmak için Ekle ve Düzen'i tıklatın.
  9. 8. Adımda oluşturulan Çıkış menü maddesi olay işleyicisinin yöntemi işlevi aşağıdaki satırı koyun:
    PostMessage(WM_COMMAND, IDOK, 0L);
    					
    bu kullanıcı Dosya menüsünden Çıkış ' ı tıklattığında, Tamam ' ı tıklatarak aynı sonucu üretir. Tamam ' ı tıklatarak, uygulamanızın iletişim kutusunu kapatır.

  10. Hızlandırıcı yeni kaynak oluşturmak ve CTRL + E ilişkilendirme ID_FILE_EXIT birlikte anahtar. Değişiklikleri kaydedin.
  11. # Include ifadelerden sonra aşağıdaki genel değişkenleri bildirmek için Stdafx.h dosyasını düzenleyin:
    extern HWND    ghDlg;          // Handle to main dialog box.
    extern HACCEL  ghAccelTable;   // Handle to accelerator table.
    					
  12. CWinApp içeren .cpp dosyasında türetilmiş sınıf uygulaması (genellikle .cpp dosyayla aynı proje adınızı temel adı), aşağıdaki genel değişkeni ba?latma ekleyin:
    HWND    ghDlg = 0;          // Handle to main dialog box.
    HACCEL  ghAccelTable = 0;   // Handle to accelerator table.
    					
  13. Türetilmiş bir sınıf (varsayılan hakkında iletişim kutusunda uygulayan değil iletişim sınıfının) ana CDialogOnInitDialog() yöntemi bulun. Gerekirse, OnInitDialog() yöntemi için geçersiz kılma ekleyebilirsiniz. Bunu yapmak için <a0></a0>, sınıf görünüm penceresinde CDialog türetilmiş sınıf seçmek için tıklatın ve sonra da <a2>Properties penceresinde Overrides</a2>'ı tıklatın. OnInitDialog satırını bulun ve sağ sütunu tıklatın. Bu sınıf için OnInitDialog() geçersiz aldıysanız, geçersiz kılma oluşturma seçeneği.
  14. Aşağıdaki kod satırı eklemek için daha önce eklenen işlev düzenleyin:
    ghDlg = m_hWnd;
    					
  15. Türetilmiş CWinApp uygulaması içeren .cpp dosyasında InitInstance() sınıfı yöntemini öğrenin. Temel sınıf CWinApp::InitInstance() ça?r? hemen sonra aşağıdaki satırı ekleyin:
    ghAccelTable = LoadAccelerators(AfxGetInstanceHandle(),
    MAKEINTRESOURCE(IDR_ACCELERATOR1));
    					
    Not: Burada kullanılan kaynak KIMLIĞI (IDR_ACCELERATOR1) eklenen Hızlandırıcı tablosu kaynak kimliğidir. 10. adımda.

  16. Geçersiz kılma ProcessMessageFilter() sınıf yöntemi için türetilmiş CWinApp sınıfına ekleyin. Sınıf görünüm penceresinde bunun için <a0></a0>, projenizde CWinApp türetilmiş sınıf seçin. Sonra Properties penceresinde Overrides ' i tıklatın. Properties penceresinde ProcessMessageFilter satırı bulun ve bu satırın en sağdaki sütunu seçin. Aşağı açılan oku tıklatın ve sonra ProcessMessageFilter yöntemi için geçersiz kılma eklemek için bu seçeneği tıklatın.
  17. Aşağıdaki uygulama taşıdığından ProcessMessageFilter() yöntemi geçersiz kılma değiştirin:
    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. Derleyip uygulamanın çalıştırın. Bir menü olduğunu unutmayın. Dosya menüsünden Çıkış ' ı tıklatın veya CTRL + E tuş bileşimine basın, uygulama, beklendiği gibi kapatır.

Özellikler

Makale numarası: 100770 - Last Review: 21 Kasım 2006 Salı - Gözden geçirme: 3.1
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Foundation Class Library 4.2, Ne zaman ne ile kullanilir:
    • 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
Anahtar Kelimeler: 
kbmt kbacceleratorkey kbhowto kbkeyaccel kbmenu kbui KB100770 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:100770

Geri Bildirim Ver

 

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