การสร้างกล่องโต้ตอบโมดอล

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

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

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

คำสั่งต่อไปนี้สร้างกล่องโต้ตอบโมดอล แบบกล่องโต้ตอบเป็นทรัพยากรในแฟ้มที่ปฏิบัติการได้ของโปรแกรมประยุกต์ และมีตัวระบุทรัพยากร DLG_DELETEITEM:

กรณี WM_COMMAND: สลับ (LOWORD(wParam)) {กรณี IDM_DELETEITEM: ถ้า (DialogBox (hinst, MAKEINTRESOURCE(DLG_DELETEITEM), hwnd, DeleteItemProc (DLGPROC)) == IDOK) {
 
                    / / คำสั่ง การทำให้เสร็จสมบูรณ์ szItemName / / ประกอบด้วยชื่อของสินค้า / / ลบ 

                }
 
                else 
                {

/ / ยกเลิกคำสั่ง 

                } 
                break; 
        } กลับ 0 L 

 

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

char szItemName [80]; / / ได้รับชื่อของรายการที่จะลบ 
 
ติดต่อกลับ BOOL DeleteItemProc (hwndDlg ข้อความ wParam, lParam) HWND hwndDlg 
ข้อความ UINT 
WPARAM wParam 
LPARAM lParam 
{สวิตช์ (ข้อความ) {กรณี WM_COMMAND: สลับ (LOWORD(wParam)) {กรณี IDOK: if (GetDlgItemText (hwndDlg, ID_ITEMNAME, szItemName, 80)) * szItemName = 0 
 
                    / / Fall ผ่าน 
 
                กรณี IDCANCEL: EndDialog (hwndDlg, wParam); 
                    ส่งกลับ TRUE 
            }} ส่งกลับ FALSE 
} 

 

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

Index