วิธีการใช้แป้นตัวเร่งและเมนูหลักบนกล่องโต้ตอบใน c ++ Visual

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 100770 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
ขยายทั้งหมด | ยุบทั้งหมด

สรุป

โปรแกรมประยุกต์จำนวนมากใช้กล่องโต้ตอบ modal เป็นหน้าต่างโปรแกรมประยุกต์หลัก โปรแกรมประยุกต์ที่ใช้เทคนิคนี้ยังอาจรวมถึงเมนูหลักบนกล่องโต้ตอบ โดยทั่วไป อย่างน้อยหนึ่งรายการเมนูมีตัวเร่งแป้นพิมพ์ที่เชื่อมโยงด้วย บทความนี้อธิบายขั้นตอนที่จำเป็นต้องเพิ่ม accelerators เมนูและแป้นพิมพ์ตัวช่วยสร้างการแอพลิเคชัน MFC โต้ตอบโดยใช้กล่องแอพพลิเคชัน

ข้อมูลเพิ่มเติม

โปรแกรมประยุกต์โดยทั่วไปซึ่งถูกพัฒนาขึ้นสำหรับระบบปฏิบัติการ Microsoft Windows โดยใช้ c ++ Visual และใน Microsoft Windows ซอฟต์แวร์พัฒนา Kit (SDK) และที่ใช้แป้นพิมพ์ accelerators โทรศัพท์นี้TranslateAccelerator()ฟังก์ชันในการวนรอบของข้อความหลัก อย่างไรก็ตาม เมื่อคุณใช้กล่องโต้ตอบ modal เป็นหน้าต่างหลัก แอพลิเคชันไม่ได้มีการวนรอบของข้อความหลัก แทน แอพลิเคชันที่ใช้โต้ตอบกล่องตัวจัดการข้อความลูป (ที่อยู่ภายใน Windows) การแปล และ dispatch ข้อความ นอน เนื่องจากมีการวนรอบของข้อความนี้ไม่ได้ถูกออกแบบเพื่อประมวลผล accelerators จะไม่เรียกใช้การTranslateAccelerator()ฟังก์ชัน

การประมวลผลตัวเร่งคีย์ในกล่องโต้ตอบ modal ใน MFC คุณต้องแทนCWinApp::ProcessMessageFilter()ฟังก์ชัน การเรียกการกรอบการทำงานProcessMessageFilter()ก่อนจะประมวลผลข้อความ

การปรับเปลี่ยนเป็นชนิดโปรแกรมประยุกต์ที่ใช้กล่องโต้ตอบตัวช่วยสร้างการแอพลิเคชัน MFC ใน Visual c ++.NET อย่างถูกต้องดำเนินการตัวเร่งคีย์ ดำเนินการดังต่อไปนี้:
  1. ใน Visual Studio .NET สร้างโปรแกรมประยุกต์ MFC ใหม่ ในบานหน้าต่างด้านซ้ายของตัวช่วยสร้างการแอพลิเคชัน MFC คลิกชนิดของแอพลิเคชันแล้ว ตรวจสอบให้แน่ใจว่าที่ชนิดของแอพลิเคชันตั้งค่าเป็นขึ้นอยู่กับการโต้ตอบ.
  2. ในมุมมองทรัพยากร คลิกสองครั้งที่ทรัพยากรการโต้ตอบเพื่อเปิดตัวแก้ไขทรัพยากรการโต้ตอบ หมายเลขทรัพยากรของทรัพยากรการโต้ตอบเป็นเหมือนกับ IDD_myproject_DIALOG (ที่ใดmyprojectคือชื่อที่คุณมอบให้โครงการแอพลิเคชันของคุณเมื่อคุณสร้าง)
  3. มีการโต้ตอบทรัพยากรเปิดในโปรแกรมแก้ไขทรัพยากรการโต้ตอบ ค้นหาในหน้าต่างคุณสมบัติ กล่องโต้ตอบแก้ไขเส้นขอบคุณสมบัติ และระบุการเส้นบางลักษณะเส้นขอบ ขั้นตอนนี้ไม่จำเป็นสำหรับกล่องโต้ตอบที่ประกอบด้วยเมนู
  4. สร้างเมนูทรัพยากรใหม่ที่ประกอบด้วยรายการระดับสูงสุดที่ชื่อแฟ้ม และในเมนูสินค้ามีการตั้งชื่อ & Exit\tCTRL + E (CTRL + X คือมักจะเกี่ยวข้องกับข้อความ cutting เพื่อให้มีใช้ CTRL + E แทน)
  5. ในตัวแก้ไขเมนู คลิกสร้างขึ้นใหม่exitรายการในเมนู ในหน้าต่างคุณสมบัติ ใจว่าการหมายเลขคุณสมบัติสำหรับการexitเมนูถูกกำหนดเป็นid_file_exit.
  6. การเชื่อมโยงเมนูใหม่กับกล่องโต้ตอบ โดยการป้อนหมายเลขของเมนูในทรัพยากรการโต้ตอบเมนูคุณสมบัติ เปิดตัวแก้ไขกล่องโต้ตอบสำหรับทรัพยากรการโต้ตอบ และการค้นหานี้เมนูคุณสมบัติในหน้าต่างคุณสมบัติ ตั้งค่าดังกล่าวไปยังรหัสทรัพยากรที่คุณสร้างขึ้นสำหรับเมนูในขั้นตอนที่ 4 เมื่อต้องการทำเช่นนี้ คลิกรายการแบบหล่นลงในเมนูคุณสมบัติแถว แล้วคลิกเพื่อเลือกหมายเลขของทรัพยากรสำหรับเมนูในรายการ
  7. ในตัวแก้ไขเมนู คลิกขวา& Exit\tCTRL + Eแล้ว คลิกเพิ่มตัวจัดการเหตุการณ์.
  8. ในวิซาร์ตัวจัดการเหตุการณ์ เลือกนั้นคำสั่งชนิดของข้อความ ในการคลาสรายการ การเลือกนั้นCDialogคลาหลักสำหรับการจัดการให้มีสร้างในที่ได้รับ ตรวจสอบให้แน่ใจว่า ชื่อตัวจัดการฟังก์ชันเหมาะสม และจากนั้น คลิกเพิ่ม และแก้ไขเมื่อต้องการสร้างตัวจัดการเหตุการณ์ของรายการเมนู
  9. แทรกบรรทัดต่อไปนี้ในฟังก์ชันexitเมนูรายการเหตุการณ์จัดการวิธีที่จะสร้างขึ้นในขั้นตอนที่ 8:
    PostMessage(WM_COMMAND, IDOK, 0L);
    					
    ซึ่งสร้างลักษณะพิเศษเดียวกันเป็นคลิกตกลงเมื่อผู้ใช้คลิกexitในการแฟ้ม:เมนู คลิกตกลงปิดโปรแกรมประยุกต์ของกล่องโต้ตอบของคุณ

  10. สร้างทรัพยากรตัวเร่งใหม่และสัมพันธ์ CTRL + E คีย์ร่วมกับid_file_exit. บันทึกการเปลี่ยนแปลงของคุณ
  11. แก้ไขแฟ้ม Stdafx.h การประกาศตัวแปรทั้งหมดต่อไปนี้หลังจาก#รวมใบแจ้งยอด:
    extern HWND    ghDlg;          // Handle to main dialog box.
    extern HACCEL  ghAccelTable;   // Handle to accelerator table.
    					
  12. ในแฟ้ม.cpp ที่ประกอบด้วยCWinAppคลาสที่ได้รับการใช้งาน (โดยปกติ.cpp แฟ้มที่ มีชื่อหลักเหมือนกับชื่อโครงการของคุณ), เพิ่ม initializations ตัวแปรทั้งหมดต่อไปนี้:
    HWND    ghDlg = 0;          // Handle to main dialog box.
    HACCEL  ghAccelTable = 0;   // Handle to accelerator table.
    					
  13. ในหลักCDialogคลาสที่ได้รับ (ไม่โต้ตอบคลาที่ใช้ค่าเริ่มต้นเกี่ยวกับกล่องโต้ตอบ), ค้นหานี้OnInitDialog()วิธีการ ถ้าจำเป็น คุณสามารถเพิ่มการแทนข้อสำหรับการOnInitDialog()วิธีการ เมื่อต้องการทำเช่นนี้ คลิกเพื่อเลือกนั้นCDialogคลาสที่ได้รับในหน้าต่างของมุมมองคลา แล้วคลิกแทนที่ในหน้าต่างคุณสมบัติ ค้นหานี้OnInitDialogแถว และคลิกคอลัมน์ด้านขวา ถ้าOnInitDialog()ไม่ได้ถูกแทนสำหรับคลาสนี้ คุณมีตัวเลือกในการสร้างการแทนมีอยู่
  14. แก้ไขฟังก์ชันที่คุณได้เพิ่มไว้ก่อนหน้านี้เพื่อรวมบรรทัดของรหัสต่อไปนี้:
    ghDlg = m_hWnd;
    					
  15. ในแฟ้ม.cpp ที่ประกอบด้วยCWinAppได้รับการใช้งาน ค้นหานี้InitInstance()วิธีการคลาส เพิ่มบรรทัดต่อไปนี้ในทันทีหลังจากการโทรเป็นคลาสพื้นฐานCWinApp::InitInstance():
    ghAccelTable = LoadAccelerators(AfxGetInstanceHandle(),
    MAKEINTRESOURCE(IDR_ACCELERATOR1));
    					
    หมายเหตุ:: หมายเลขทรัพยากรที่ใช้ต่อไปนี้ (IDR_ACCELERATOR1) มี ID ของตารางทรัพยากรตัวเร่งที่ถูกเพิ่มเข้าไปในขั้นตอนที่ 10

  16. เพิ่มการแทนที่ไปยังCWinAppคลาสำหรับที่ได้รับการProcessMessageFilter()วิธีการคลาส เมื่อต้องการทำเช่นนี้ ในหน้าต่างของมุมมองคลา เลือกนั้นCWinAppคลาสที่ได้รับในโครงการของคุณ จากนั้น ในหน้าต่างคุณสมบัติ คลิกแทนที่. ค้นหานี้ProcessMessageFilterแถวในหน้าต่างคุณสมบัติและเลือกคอลัมน์ขวามากที่สุดของแถวนั้น คลิกลูกศรแบบหล่นลง และคลิก ตัวเลือกในการเพิ่มการแทนข้อสำหรับการProcessMessageFilterวิธีการ
  17. แก้ไขการProcessMessageFilter()วิธีแทนที่เพื่อให้มีการใช้งานต่อไปนี้:
    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. การคอมไพล์ และเรียกใช้โปรแกรมประยุกต์ โปรดสังเกตว่า มีเมนู เมื่อคุณคลิกexitในการแฟ้ม:เมนูหรือกด CTRL + E แอพลิเคชันปิด ตามที่คาดไว้

คุณสมบัติ

หมายเลขบทความ (Article ID): 100770 - รีวิวครั้งสุดท้าย: 12 ตุลาคม 2553 - Revision: 2.0
ใช้กับ
  • Microsoft Foundation Class Library 4.2 เมื่อใช้กับ:
    • Microsoft Visual C++ 2.1
    • Microsoft Visual C++ 4.0 Standard Edition
    • Microsoft Visual C# .NET 2002 Standard Edition
Keywords: 
kbacceleratorkey kbhowto kbkeyaccel kbmenu kbui kbmt KB100770 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:100770

ให้ข้อเสนอแนะ

 

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