การ TAB คีย์ แป้นลูกศร และตัวเร่งคีย์ไม่ทำงานอย่างที่คาดไว้เมื่อตัวควบคุม ActiveX คือ หน้าต่างหลัก ของกล่องโต้ตอบ modeless หรือหน้าต่าง propertysheet

ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ

ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:187988
บทความนี้ถูกเก็บถาวรแล้วเนื้อหาของบทความจึงถูกนำเสนอ "ตามลักษณะที่เป็น" และจะไม่มีการปรับปรุงข้อมูลอีก
อาการ
เมื่อตัวควบคุม ActiveX คือ หน้าต่างหลักของกล่องโต้ตอบ modeless หรือหน้าต่าง propertysheet, TAB คีย์ แป้นลูกศร และแป้นตัวเร่งการทำไม่งานตามที่คาดไว้ แป้น TAB ไม่ย้ายโฟกัสสำหรับการป้อนค่าจากตัวควบคุมหนึ่งไปยังอีก กดแป้นลูกศรหรือแป้นตัวเร่งในกล่องโต้ตอบ modeless หรือ propertysheet หน้าต่างได้ไม่มีผล
สาเหตุ
ปัญหานี้มีตัวควบคุม ActiveX ไม่เป็นเจ้าของ pump ข้อความ pump ข้อความเป็นเจ้าของ โดยแอพลิเคชันคอนเทนเนอร์ ดังนั้น ข้อความของการกดแป้นพิมพ์ทั้งหมดจะดำเนินการ โดยโปรแกรมประยุกต์คอนเทนเนอร์ และ dispatched ไปกล่องโต้ตอบ modeless กล่อง propertysheet หน้าต่างหรือไม่

ปัญหาไม่เกิดขึ้นกับ หน้าต่าง/propertysheet กล่องโต้ตอบ modal เนื่องจาก pump ข้อความเป็นเจ้าของผู้จัดการของกล่องโต้ตอบ และภายใต้การดังกล่าวจะดูแลของหน้าที่จัดการข่าวสารการกดแป้นพิมพ์ทั้งหมด
การแก้ไข
ติดตั้ง hook ของบันทึกการ WH_GETMESSAGE Windows สำหรับคลาส กล่อง/propertysheet ที่ได้รับการโต้ตอบ modeless การอนุญาตให้ดักกดแป้นพิมพ์ และจัดการ accelerators
สถานะ
ลักษณะการทำงานนี้เกิดจากการออกแบบ
ข้อมูลเพิ่มเติม
ตัวอย่างต่อไปนี้แสดงวิธีการติดตั้ง Windows ของ hook ข้อความไปยังคลาสที่ modeless มา CPropertySheet:

ตัวอย่างรหัส

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

ขั้นตอนในการทบทวนการเกิดปัญหา

  1. เลือก ControlWizard ActiveX MFC ActiveX ในการสร้างตัวควบคุม ยอมรับการตั้งค่าเริ่มต้นทั้งหมด
  2. แสดงการโต้ตอบ modeless กล่อง propertysheet หน้าต่างหรือเมื่อคลิกสองครั้งที่อยู่ภายในตัวควบคุม
ผลลัพธ์: เมื่อมีแสดงโต้ตอบ modeless กล่องหรือ propertysheet หน้าต่าง กดแป้น TAB หรือแป้นตัวเร่งได้ไม่มีผล
ข้อมูลอ้างอิง
(c) Microsoft Corporation 1998 สิทธิ์ทั้งหมดที่สำรองไว้ contributions โดย Kah Yeong Tam, Microsoft Corporation

ocx kbcodesam แท็บ hooks dll mfcdll

คำเตือน: บทความนี้ได้รับการแปลโดยอัตโนมัติ

คุณสมบัติ

รหัสบทความ: 187988 - การตรวจสอบครั้งสุดท้าย: 12/05/2015 08:49:28 - ฉบับแก้ไข: 1.0

Microsoft Foundation Class Library 4.2

  • kbnosurvey kbarchive kbcode kbctrlcreate kbdlg kbprb kbmt KB187988 KbMtth
คำติชม