Visual C++, kalıcı bir iletişim kutusu içinde kısayol tuşlarını kullanma

Makale çevirileri Makale çevirileri
Makale numarası: 222829 - Bu makalenin geçerli olduğu ürünleri görün.
Not Microsoft Visual C++ .NET (2002), Microsoft .NET Framework tarafından sağlanan bir yönetilen kod model hem de yerel Microsoft Windows kod modeli yönetilmeyen destekler. Bu makaledeki bilgiler yalnızca yönetilmeyen Visual C++ kod uygulanır.
Hepsini aç | Hepsini kapa

Özet

Kısayol tuşları, bir ortak kullanıcı arabirimi Windows uygulamaları özelliğidir; bu nedenle, neden bunları hemen uygulamaya sınırlamak? Bu makalede, herhangi bir kalıcı iletişim kutusunu Hızlandırıcı tuş işlevselliği eklemek gösterilmiştir.

Daha fazla bilgi

Klavye hızlandırıcıları, uygulamanın ana ileti döngüsünü TranslateAccelerator() işlevini çağırarak işlenir. Ancak, kalıcı bir iletişim kutusu için (Windows'da yerleşik) iletişim kutusu yöneticisini ileti döngüsü çevirir ve iletileri göndermek için kullanılır. Tabii ki bu ileti döngüsü hızlandırıcıları işlemek için tasarlanmış nedeniyle TranslateAccelerator() işlevini çağırmaz.

Kısayol tuşlarını kalıcı bir iletişim kutusu işlemek için <a0></a0>, iletişim kutusunun PreTranslateMessage() geçersiz işlev ve çağırarak, iletinin bir kısayol tuşu olarak atamak işlemek için:: TranslateAccelerator(). Bu yöntem başarısız olursa, taban sınıfı PreTranslateMessage() ça??rarak sonra işlem devam eder.

Bu makalede amacıyla Hızlandırıcı tuş işlevselliği MFC MDI uygulama AboutBox iletişim kutusuna ekledik:
  1. Test adlı yeni bir MFC MDI uygulaması oluşturun.
  2. Kaynak Kimliği "IDC_BUTTON1" AboutBox iletişim kutusu kaynak için bir düğme ekleyin.
  3. Bu düğme için bir işleyici ekleyin ve Hızlandırıcı tuş olarak çalışan bir göstergesi olarak aşağıdaki kodu ekleyin düğmeyi çift tıklatın:
    AfxMessageBox("Hello");
  4. Kaynak için yeni bir Hızlandırıcı tablo ekleyin.
  5. F5 ilişkilendirerek, tabloya bir Hızlandırıcı anahtarı eklemek için kaynak KIMLIĞI "IDC_BUTTON1" anahtar.
  6. Üye değişken, m_hAccelTable sınıfa eklemek CAboutBox:
    HACCEL  m_hAccelTable;
  7. Içinde CAboutBox::CAboutBox m_hAccelTable başlatılamıyor:
    m_hAccelTable = LoadAccelerators(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_ACCELERATOR1));
  8. Geçersiz kılma, PreTranslateMessage için CAboutDlg eklemek için (sınıf Sihirbazı Visual C++ 6.0 ve önceki sürümlerinde) kodu Sihirbazı'nı kullanın.
  9. Aşağıdaki kod satırlarını CAboutBox::PreTranslateMessage() yöntemini ekleyin:
    BOOL CAboutDlg::PreTranslateMessage(MSG* pMsg) {
       if (m_hAccelTable) {
          if (::TranslateAccelerator(m_hWnd, m_hAccelTable, pMsg)) {
             return(TRUE);
          }
       }
       return CDialog::PreTranslateMessage(pMsg);
    
    }
  10. Derleyip CTestApp çalıştırın.

Sonuçları CAboutBox etkin olduğunda, kısayol tuşu F5 şimdi button1 işleyicisi tetikler.

Referanslar

Kısayol tuşu, kalıcı iletişim kutuları içinde işleme hakkında ek bilgi için lütfen Microsoft Knowledge Base'de aşağıdaki makaleye bakın:
100770 BILGI: Hızlandırıcı tuş modal iletişim kutusu ana pencere ile kullanma

Özellikler

Makale numarası: 222829 - Last Review: 21 Kasım 2006 Salı - Gözden geçirme: 4.1
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Foundation Class Library 4.2, Ne zaman ne ile kullanilir:
    • Microsoft Visual C++ 4.1 Aboneliği
    • Microsoft Visual C++ 4.2 Enterprise Edition
    • Microsoft Visual C++ 5.0 Enterprise Edition
    • Microsoft Visual C++ 6.0 Enterprise Edition
    • Microsoft Visual C++ 4.2 Professional Edition
    • Microsoft Visual C++ 5.0 Professional Edition
    • Microsoft Visual C++ 6.0 Professional Edition
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
    • Microsoft Visual C++ .NET 2002 Standard Edition
    • Microsoft Visual C++ .NET 2003 Standard Edition
Anahtar Kelimeler: 
kbmt kbacceleratorkey kbhowto kbkeyaccel kbuidesign KB222829 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:222829

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