กล่องโต้ตอบโมดอล

กล่องโต้ตอบโมดอลควรมีหน้าต่างแบบผุดขึ้นที่มีเมนูระบบ แถบชื่อเรื่อง และเส้น ขอบแบบหนา กล่าวคือ แบบกล่องโต้ตอบควรระบุลักษณะ WS_POPUP, WS_SYSMENU, WS_CAPTION และ DS_MODALFRAME แม้ว่าโปรแกรมประยุกต์สามารถกำหนดลักษณะ WS_VISIBLE ระบบเสมอจะแสดงกล่องโต้ตอบโมดอลคำนึงว่าแม่แบบกล่องโต้ตอบระบุลักษณะ WS_VISIBLE โปรแกรมประยุกต์ไม่ต้องสร้างกล่องโต้ตอบโมดอลมีลักษณะ WS_CHILD ปิดการใช้กล่องโต้ตอบโมดอลที่ มีลักษณะนี้งานตัวเอง ทำให้สามารถป้อนข้อมูลใด ๆ ตามมาจากการเข้าถึงแอพลิเคชัน.

โปรแกรมประยุกต์สร้างกล่องโต้ตอบโมดอล โดยใช้ฟังก์ชันDialogBoxหรือDialogBoxIndirect DialogBoxต้องใช้ชื่อหรือรหัสของทรัพยากรที่ประกอบด้วยแม่แบบกล่องโต้ตอบ DialogBoxIndirectต้องใช้หมายเลขอ้างอิงของวัตถุของหน่วยความจำประกอบด้วยแม่แบบกล่องโต้ตอบ นอกจากนี้ฟังก์ชันDialogBoxParamและDialogBoxIndirectParamยังสร้างกล่องโต้ตอบโมดอล พวกเขาเหมือนกับฟังก์ชันกล่าวถึงก่อนหน้านี้ แต่การส่งผ่านพารามิเตอร์ที่ระบุลงในกระบวนงานของกล่องโต้ตอบเมื่อมีสร้างกล่องโต้ตอบ.

เมื่อต้องการสร้างกล่องโต้ตอบโมดอล ระบบทำหน้าต่างที่ใช้งาน กล่องโต้ตอบจะยังคงทำงานจนกว่ากระบวนการกล่องโต้ตอบเรียกใช้ฟังก์ชันEndDialogหรือหน้าต่างในโปรแกรมประยุกต์อื่นในการเปิดใช้งานระบบอยู่ ทั้งผู้ใช้และโปรแกรมประยุกต์ที่ไม่สามารถทำให้เจ้าของหน้าต่างใช้งานอยู่จนกว่ากล่องโต้ตอบโมดอลถูกทำลาย.

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

เป็นระบบสร้างกล่องโต้ตอบโมดอล ส่งข้อความWM_CANCELMODEไปยังหน้าต่าง (ถ้ามี) ในขณะนี้จับเมาส์การป้อนข้อมูล โปรแกรมประยุกต์ที่ได้รับข้อความนี้ควรปล่อยการจับเมาส์เพื่อให้ผู้ใช้สามารถเลื่อนเมาส์ในกล่องโต้ตอบโมดอล เนื่องจากระบบปิดใช้งานหน้าต่างเจ้า ทั้งหมดเมาส์การป้อนข้อมูลจะสูญหายถ้าเจ้าไม่สามารถปล่อยเมาส์เมื่อได้รับข้อความนี้.

การประมวลผลข้อความสำหรับกล่องโต้ตอบโมดอล ระบบเริ่มทำงานวนรอบตัวเองความ ควบคุมคิวข้อความสำหรับโปรแกรมประยุกต์ทั้งหมดชั่วคราว เมื่อระบบจะดึงข้อความที่ไม่ชัดเจนสำหรับกล่องโต้ตอบ dispatches ข้อความไปยังหน้าต่างที่เหมาะสม ถ้ามันดึงข้อความWM_QUITลงรายการบัญชีข้อความกลับไปยังคิวข้อความแอพลิเคชันเพื่อให้วนรอบข้อความหลักของโปรแกรมประยุกต์ในที่สุดสามารถดึงข้อความ.

ระบบส่งข้อความWM_ENTERIDLEไปยังเจ้าของหน้าต่างเมื่อใดก็ ตามที่โปรแกรมประยุกต์คิวข้อความว่างเปล่า โปรแกรมประยุกต์ที่สามารถใช้ข้อความนี้เพื่อดำเนินงานในพื้นหลังขณะที่กล่องโต้ตอบยังคงอยู่บนหน้าจอ เมื่อใช้โปรแกรมประยุกต์ที่มีข้อความในลักษณะนี้ แอพลิเคชันต้องบ่อยผลตอบแทนควบคุม (ตัวอย่างเช่น โดยการใช้ฟังก์ชันPeekMessage ) ดังนั้นที่ กล่องโต้ตอบโมดอลสามารถได้รับการป้อนข้อมูลใด ๆ ผู้ใช้ เมื่อต้องการป้องกันไม่ให้กล่องโต้ตอบโมดอลส่งข้อความ WM_ENTERIDLE แอพลิเคชันสามารถระบุลักษณะ DS_NOIDLEMSG เมื่อสร้างกล่องโต้ตอบ.

โปรแกรมประยุกต์ขัดกล่องโต้ตอบโมดอล โดยใช้ฟังก์ชันEndDialog ในกรณีส่วนใหญ่ ขั้นตอนในกล่องโต้ตอบเรียกEndDialogเมื่อผู้ใช้เลือกคำสั่งจากเมนูระบบของกล่องโต้ตอบ หรือเลือกปุ่ม OK หรือยกเลิกกล่องโต้ตอบ กล่องโต้ตอบสามารถส่งกลับค่าฟังก์ชันDialogBox (หรือฟังก์ชันอื่น ๆ สร้าง) โดยระบุค่าเมื่อเรียกฟังก์ชันEndDialog ระบบส่งกลับค่านี้หลังจากกล่องโต้ตอบเท่านั้น โปรแกรมประยุกต์ส่วนใหญ่ใช้ค่าที่ส่งคืนนี้เพื่อตรวจสอบว่า กล่องโต้ตอบความสำเร็จของงาน หรือถูกยกเลิก โดยผู้ใช้ ระบบการส่งคืนการควบคุมจากฟังก์ชันที่สร้างกล่องโต้ตอบจนกว่ากระบวนการกล่องโต้ตอบเรียกว่าฟังก์ชันEndDialog.

Index