Tombol TAB, tombol panah, dan pemercepat kunci tidak bekerja seperti yang diharapkan ketika kontrol ActiveX jendela induk dari kotak modeless dialog atau jendela propertysheet

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 187988 - Melihat produk di mana artikel ini berlaku.
Perbesar semua | Perkecil semua

Pada Halaman ini

GEJALA

Ketika kontrol ActiveX adalah jendela induk modeless jendela kotak atau propertysheet dialog, TAB kunci, tombol panah, dan accelerator tombol tidak bekerja seperti yang diharapkan. Tombol TAB tidak bergerak input fokus dari salah satu kontrol lain. Menekan tombol panah atau pemercepat kunci di modeless jendela kotak atau propertysheet dialog tidak berpengaruh.

PENYEBAB

Masalahnya adalah kontrol ActiveX tidak memiliki pesan pompa. Pompa pesan dimiliki oleh aplikasi wadah. Oleh karena itu, semua pesan keystroke diambil oleh aplikasi wadah dan tidak dikirim ke jendela kotak atau propertysheet modeless dialog.

The tidak ada masalah dengan jendela kotak/propertysheet modal dialog karena pesan pompa dimiliki oleh manajer kotak dialog, dan merawat penanganan semua penekanan pesan.

PEMECAHAN MASALAH

Menginstal Windows WH_GETMESSAGE kait untuk modeless kotak dialog/propertysheet diturunkan kelas untuk memungkinkan untuk mencegat penekanan tombol dan menangani akselerator.

STATUS

Perilaku ini sesuai rancangannya.

INFORMASI LEBIH LANJUT

Contoh berikut menunjukkan cara menginstal Windows Message hook untuk kelas berasal CPropertySheet modeless:

Contoh kode

   // 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();

   }
				

Langkah-langkah untuk Mereproduksi Masalah

  1. Pilih MFC ActiveX ControlWizard untuk membuat ActiveX kontrol. Menerima semua pengaturan default.
  2. Menampilkan jendela kotak atau propertysheet modeless dialog ketika mengklik dua kali dalam kontrol.
HASIL: Ketika jendela kotak atau propertysheet modeless dialog menunjukkan, menekan tombol TAB atau pemercepat kunci tidak berpengaruh.

REFERENSI

(c) Microsoft Corporation 1998, All Rights Reserved. Kontribusi oleh Yeong-Kah Tam, Microsoft Corporation.

Properti

ID Artikel: 187988 - Kajian Terakhir: 16 September 2011 - Revisi: 2.0
Berlaku bagi:
  • Microsoft Foundation Class Library 4.2, ketika digunakan dengan:
    • Microsoft Visual C++ 4.2 Enterprise Edition
    • Microsoft Visual C++ 5.0 Enterprise Edition
    • Microsoft Visual C++ 5.0 Professional Edition
    • Microsoft Visual C++ .NET 2002 Standard Edition
    • Microsoft Visual C++ .NET 2003 Standard Edition
Kata kunci: 
kbcode kbctrlcreate kbdlg kbprb kbmt KB187988 KbMtid
Penerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:187988

Berikan Masukan

 

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