กล่องโต้ตอบการเตรียมใช้งาน

เริ่มต้นกล่องโต้ตอบและเนื้อหาขณะประมวลผลข้อความ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จะต้องเรียกหมายเลขอ้างอิงหน้าต่างของตัวควบคุมที่ต้องการ.

Index