เริ่มต้นกล่องโต้ตอบและเนื้อหาขณะประมวลผลข้อความWM_INITDIALOG งานทั่วไปคือการเตรียมใช้งานตัวควบคุมเพื่อแสดงการตั้งค่ากล่องโต้ตอบปัจจุบัน งานทั่วไปอื่นคือการ จัดกึ่งกลางของกล่องโต้ตอบ บนหน้าจอ หรือภาย ในหน้าต่างของเจ้าของ งานมีประโยชน์สำหรับกล่องโต้ตอบบางอย่างคือ เพื่อกำหนดโฟกัสการป้อนข้อมูลลงในตัวควบคุมที่กำหนดแทนที่จะยอมรับค่าเริ่มต้นสำหรับการป้อนค่าโฟกัส.
ในตัวอย่างดังต่อไปนี้ ขั้นตอนในกล่องโต้ตอบจัดกึ่งกลางของกล่องโต้ตอบ และตั้งโฟกัสป้อนข้อมูลขณะประมวลผลข้อความ WM_INITDIALOG การจัดกึ่งกลางกล่องโต้ตอบ กระบวนการดึงหน้าต่างสี่เหลี่ยมสำหรับกล่องโต้ตอบและหน้าต่างการเจ้าของ และคำนวณตำแหน่งใหม่สำหรับกล่องโต้ตอบ เพื่อกำหนดโฟกัสป้อนข้อมูล กระบวนการตรวจสอบพารามิเตอร์wParamเพื่อกำหนดตัวระบุของโฟกัสสำหรับการป้อนค่าเริ่มต้น:
HWND hwndOwner
RECT rc, rcDlg, rcOwner
กรณี WM_INITDIALOG: / / รับเจ้าสี่เหลี่ยมช่องหน้าต่างและโต้ตอบ
ถ้า ((hwndOwner = GetParent(hwndDlg)) == NULL) {
hwndOwner = GetDesktopWindow()
}
GetWindowRect (hwndOwner แอมป์ rcOwner);
GetWindowRect (hwndDlg และ rcDlg);
CopyRect (& rc, & rcOwner);
/ / ออฟเซ็ตเจ้า และโต้ตอบกล่องสี่เหลี่ยมเพื่อให้ / / ค่าที่ด้านขวาและด้านล่างแสดงความกว้าง และ / / สูง และตรงข้ามแล้วเจ้าอีกครั้งเพื่อละทิ้งการ / / พื้นที่มาอัพ โดยใช้กล่องโต้ตอบ
OffsetRect (& rcDlg, -rcDlg.left - rcDlg.top);
OffsetRect (& rc, -rc.left - rc.top);
OffsetRect (& rc, -rcDlg.right - rcDlg.bottom);
/ / ตำแหน่งใหม่เป็นผลรวมของครึ่งเหลือ / / พื้นที่และเจ้าของเดิมตำแหน่ง
SetWindowPos (hwndDlg, HWND_TOP, rcOwner.left + (rc.right/2), rcOwner.top + (rc.bottom / 2), 0, 0, / / ละเว้นขนาดอาร์กิวเมนต์ SWP_NOSIZE);
ถ้า (GetDlgCtrlID((HWND) wParam) ! = ID_ITEMNAME) {SetFocus (GetDlgItem (hwndDlg, ID_ITEMNAME));
ส่งกลับค่า FALSE
} กลับ TRUE
ในคำสั่งข้างต้น วิธีการใช้ฟังก์ชันGetParentเรียกหมายเลขอ้างอิงหน้าต่างของเจ้าของสำหรับกล่องโต้ตอบ ฟังก์ชันจะส่งกลับเจ้าของหมายเลขอ้างอิงหน้าต่างสำหรับกล่องโต้ตอบ และหมายเลขอ้างอิงหน้าต่างหลักสำหรับเด็ก windows เนื่องจากโปรแกรมประยุกต์สามารถสร้างกล่องโต้ตอบที่มีไม่มีเจ้าของ กระบวนการตรวจสอบหมายเลขอ้างอิงที่ส่งกลับ และใช้ฟังก์ชันGetDesktopWindowในการเรียกหมายเลขอ้างอิงหน้าต่างเดสก์ท็อป ถ้าจำเป็น หลังจากการคำนวณตำแหน่งใหม่ วิธีการใช้ฟังก์ชันSetWindowPosการย้ายกล่องโต้ตอบ ระบุค่า HWND_TOP เพื่อให้แน่ใจว่า กล่องโต้ตอบยังคงอยู่ด้านบนของหน้าต่างเจ้าของ.
ก่อนที่จะตั้งค่าโฟกัสป้อนข้อมูล กระบวนการตรวจสอบรหัสควบคุมของโฟกัสสำหรับการป้อนค่าเริ่มต้น ระบบส่งผ่านหมายเลขอ้างอิงหน้าต่างของโฟกัสสำหรับการป้อนค่าเริ่มต้นในพารามิเตอร์wParam ฟังก์ชันGetDlgCtrlIDจะส่งกลับเป็นตัวระบุสำหรับตัวควบคุมที่ระบุหมายเลขอ้างอิงของหน้าต่าง ถ้าตัวระบุไม่ตรงกับตัวระบุที่ถูกต้อง กระบวนการนี้ใช้ฟังก์ชันSetFocusโฟกัสป้อนข้อมูลการตั้งค่า ฟังก์ชันGetDlgItemจะต้องเรียกหมายเลขอ้างอิงหน้าต่างของตัวควบคุมที่ต้องการ.