วนรอบข้อความ

วนข้อความง่าย ๆ ประกอบด้วยการเรียกฟังก์ชันหนึ่งแต่ละฟังก์ชันเหล่านี้สาม: GetMessage, TranslateMessageและDispatchMessage.

MSG msg

ในขณะที่ (GetMessage (แอมป์ msg, NULL, 0, 0))
{
    TranslateMessage (& msg);
    DispatchMessage (& msg);
} 

ฟังก์ชันGetMessageดึงข้อความจากคิว และคัดลอกค่าไว้ในโครงสร้างของชนิดMSG จะส่งกลับค่าไม่ใช่ศูนย์ จนกว่าจะพบข้อความWM_QUITในซึ่งกรณีส่งกลับ FALSE และสิ้นสุดการวนรอบ ในโปรแกรมประยุกต์แบบเธรดเดียว สิ้นสุดการวนรอบข้อความมักเป็นขั้นตอนแรกในการปิดแอปพลิเคชัน แอปพลิเคชันสามารถสิ้นสุดการวนรอบของตนเอง โดยใช้ฟังก์ชันPostQuitMessageโดยทั่วไปในการตอบสนองต่อความต้องการของWM_DESTROYในกระบวนการทำงานหน้าต่างของหน้าต่างหลักของโปรแกรมประยุกต์.

ถ้าคุณระบุหมายเลขอ้างอิงหน้าต่างที่เป็นพารามิเตอร์ตัวสองของGetMessageเฉพาะข้อความสำหรับหน้าต่างที่ระบุถูกเรียกจากคิว GetMessageยังสามารถกรองข้อความในคิว ดึงเฉพาะข้อความเหล่านั้นที่อยู่ภายในช่วงที่ระบุ ดูข้อมูลเพิ่มเติมเกี่ยวกับข้อความที่กรองข้อมูลการกรองข้อความ.

วนรอบข้อความของเธรดต้องรวมTranslateMessageหากเธรดจะได้รับการป้อนอักขระจากแป้นพิมพ์ ระบบสร้างข้อความเสมือนคีย์ (WM_KEYDOWNและWM_KEYUP) แต่ละครั้งที่ผู้ใช้การกดแป้น เสมือนคีย์ข้อความประกอบด้วยโค้ดเสมือนของคีย์ที่ระบุคีย์ที่ถูกกด แต่ไม่ใช่ค่าของอักขระ ในการเรียกค่านี้ การวนรอบข้อความต้องประกอบด้วยTranslateMessageซึ่งแปลความเสมือนคีย์เป็นอักขระข้อความ (WM_CHAR) และใส่กลับเข้าไปในคิวข้อความแอพลิเคชัน อักขระข้อความสามารถแล้วเอาไว้คำซ้ำที่ตามมาของการวนรอบข้อความ และส่งไปยังกระบวนงานของหน้าต่าง.

ฟังก์ชันDispatchMessageส่งข้อความลงในกระบวนงานของหน้าต่างที่เชื่อมโยงกับหมายเลขอ้างอิงหน้าต่างที่ระบุไว้ในโครงสร้างMSG ถ้าหมายเลขอ้างอิงหน้าต่างเป็น HWND_TOPMOST, DispatchMessageส่งข้อความไปยังกระบวนงานหน้าต่างของ windows ทั้งหมดที่ระดับบนสุดในระบบ ถ้าหมายเลขอ้างอิงหน้าต่างเป็น NULL, DispatchMessageไม่ทำสิ่งใด ๆ กับข้อความ.

หัวข้อหลักของโปรแกรมประยุกต์เริ่มวนรอบของข้อความหลังจากการเตรียมใช้งานโปรแกรมประยุกต์ และการสร้างหน้าต่างอย่างน้อย เมื่อเริ่มต้นการใช้งาน การวนรอบข้อต่อ เพื่อดึงข้อความจากคิวข้อความของเธรด และส่งข้อมูลเหล่านั้นลงใน windows เหมาะสม การวนรอบข้อความสิ้นสุดเมื่อฟังก์ชันGetMessage WM_QUITข้อความที่เอาออกจากคิวข้อความ.

วนรอบข้อความเดียวเท่านั้นจำเป็นสำหรับคิวข้อความ แม้ว่าโปรแกรมประยุกต์ประกอบด้วยหลาย windows DispatchMessageเสมอ dispatches ข้อความไปยังหน้าต่างที่เหมาะสม เนื่องจากแต่ละข้อความในคิวคือ มีโครงสร้างMSGที่ประกอบด้วยหมายเลขอ้างอิงของหน้าต่างซึ่งความเป็นสมาชิก.

คุณสามารถปรับเปลี่ยนแบบวนซ้ำข้อความในหลากหลายวิธี ตัวอย่างเช่น คุณสามารถเรียกข้อความจากคิวโดยไม่ต้องจัดส่งพวกเขาไปยังหน้าต่าง ซึ่งเป็นประโยชน์สำหรับโปรแกรมประยุกต์ที่ติดประกาศข้อความที่ไม่ระบุหน้าต่าง คุณยังสามารถตรงGetMessageเพื่อค้นหาข้อความเฉพาะ การทิ้งข้อความอื่น ๆ ในคิว ซึ่งเป็นประโยชน์ถ้าคุณต้องชั่วข้ามใบ FIFO ปกติของคิวข้อความ.

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

ถ้าหัวข้อการใช้กล่องโต้ตอบสร้าง การวนรอบข้อความต้องมีฟังก์ชันIsDialogMessageเพื่อให้กล่องโต้ตอบสามารถรับการป้อนข้อมูลของแป้นพิมพ์.

Index