Sekme tuşu, ok tuşlarını ve kısayol tuşları üst pencere engelleyici olmayan iletişim kutusu veya bir <a0>propertysheet</a0> penceresinin bir ActiveX denetimi, beklendiği gibi çalışmıyor

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

Bu Sayfada

Belirtiler

Bir ActiveX denetimi üst pencere engelleyici olmayan iletişim kutusu veya propertysheet penceresi, SEKME tuşu, ok tuşlarını ve kısayol tuşları beklendiği gibi çalışmıyor. Sekme tuşu giriş odaklı bir denetimden diğerine hareket etmez. Pencere kısayol tuşları engelleyici olmayan iletişim kutusu veya propertysheet ve ok tuşlarına basarak hiçbir etkisi olmaz.

Neden

ActiveX denetimi, ileti pump sahip olmayan bir sorun değildir. Kapsayıcı uygulama tarafından ileti pump sahibi. Bu nedenle, tuş vuruşu iletileri kapsayıcısı uygulama tarafından gerçekleştirilen ve engelleyici olmayan iletişim kutusu veya propertysheet penceresine gönderilir.

Iletinin pump iletişim kutusu yöneticiniz tarafından aittir ve, gereken tüm tuş vuruşu iletileri işleme dikkate sorun bir kalıcı iletişim kutusu/propertysheet pencere oluşmaz.

Çözüm

Engelleyici olmayan iletişim kutusu/propertysheet türetilmiş sınıfı, tuş vuruşlarını yakalamak ve bu hızlandırıcılar izin vermek için bir Windows WH_GETMESSAGE kanca yükleyin.

Durum

Bu davranış tasarım yüzündendir.

Daha fazla bilgi

Aşağıdaki örnek, Windows yüklemek için yol gösterir ileti kanca modsuz CPropertySheet türetilmiş sınıf için:

Örnek kod

   // Handle to the Windows Message hook. It can be a global variable or a
   // member variable in your CPropertySheet-derived class.
   HHOOK hHook = NULL;



   // Hook procedure for WH_GETMESSAGE hook type.
   LRESULT CALLBACK GetMessageProc(int nCode, WPARAM wParam, LPARAM lParam)
   {
      // Switch the module state for the correct handle to be used.
      AFX_MANAGE_STATE(AfxGetStaticModuleState( ));



      // If this is a keystrokes message, translate it in controls'
      // PreTranslateMessage().
      LPMSG lpMsg = (LPMSG) lParam;
      if( (nCode >= 0) &&
         PM_REMOVE == wParam &&
         (lpMsg->message >= WM_KEYFIRST && lpMsg->message <= WM_KEYLAST) &&
         AfxGetApp()->PreTranslateMessage((LPMSG)lParam) )
         {
         // The value returned from this hookproc is ignored, and it cannot
         // be used to tell Windows the message has been handled. To avoid
         // further processing, convert the message to WM_NULL before
         // returning.
         lpMsg->message = WM_NULL;
         lpMsg->lParam = 0L;
         lpMsg->wParam = 0;
         }



      // Passes the hook information to the next hook procedure in
      // the current hook chain.
      return ::CallNextHookEx(hHook, nCode, wParam, lParam);
   }



   // Declare and define the following two functions:
   BOOL CModelessPropertySheet::OnInitDialog()
   {
      CPropertySheet::OnInitDialog();

      // Install the WH_GETMESSAGE hook function.
      hHook = ::SetWindowsHookEx(
         WH_GETMESSAGE,
         GetMessageProc,
         AfxGetInstanceHandle(),
         GetCurrentThreadId());
      ASSERT (hHook);



      return TRUE;   // Return TRUE unless you set the focus to a control.
                     // EXCEPTION: OCX Property Pages should return FALSE.


   }



   void CModelessPropertySheet::OnClose()
   {
      // Uninstall the WH_GETMESSAGE hook function.
      VERIFY (::UnhookWindowsHookEx (hHook));



      CPropertySheet::OnClose();

   }
				

Sorunu Yeniden Oluşturma Adımları

  1. Bir ActiveX oluşturmak için MFC ActiveX ControlWizard seçin denetim. Tüm varsayılan ayarları kabul edin.
  2. Denetimin içini çift engelleyici olmayan iletişim kutusu veya propertysheet penceresini görüntüler.
Sonuç: engelleyici olmayan iletişim kutusu veya propertysheet penceresinde gösterilen, SEKME tuşuna veya kısayol tuşlarına basmak hiçbir etkisi olmaz.

Referanslar

(c) Microsoft Corporation 1998, tüm hakları saklıdır. Katkıyı Yeong Kah Tam, Microsoft Corporation.

Özellikler

Makale numarası: 187988 - Last Review: 21 Kasım 2006 Salı - Gözden geçirme: 6.1
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Foundation Class Library 4.2, Ne zaman ne ile kullanilir:
    • Microsoft Visual C++ 4.2 Enterprise Edition
    • 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++ 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 kbcode kbctrlcreate kbdlg kbprb KB187988 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:187988

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