การสร้างเฟรมและเด็ก Windows

หลังจากที่ลงทะเบียนเรียนของหน้าต่าง แอปพลิเคชัน MDI สามารถสร้างของ windows ครั้งแรก สร้างหน้าต่างของเฟรม โดยใช้ฟังก์ชันCreateWindowหรือCreateWindowEx หลังจากสร้างหน้าต่างของเฟรม โปรแกรมประยุกต์สร้างหน้าต่างของไคลเอ็นต์ อีกครั้ง โดยใช้CreateWindowหรือCreateWindowEx แอพลิเคชันควรระบุการตั้งค่า MDICLIENT เป็นชื่อของหน้าต่างไคลเอ็นต์ของคลา MDICLIENT คือ หน้าต่าง preregistered คลาสที่กำหนด โดยระบบ พารามิเตอร์lpvParam CreateWindowหรือCreateWindowExจะชี้ไปยังโครงสร้างแบบCLIENTCREATESTRUCT โครงสร้างนี้ประกอบด้วยสมาชิกอธิบายไว้ในตารางต่อไปนี้:

สมาชิก คำอธิบาย
hWindowMenu จัดการเมนูหน้าต่างที่ใช้สำหรับการควบคุม windows ลูก MDI ในขณะที่มีสร้างเด็ก windows แอพลิเคชันเพิ่มชื่อเรื่องลงในเมนูหน้าต่างเป็นรายการเมนู ผู้ใช้สามารถแล้วเปิดใช้งานหน้าต่างลูก โดยการคลิกที่ชื่อเรื่องบนเมนูหน้าต่าง.
idFirstChild ระบุรหัสของหน้าต่างลูก MDI แรก MDI เด็กหน้าต่างแรกสร้างขึ้นถูกกำหนดรหัสนี้ สร้างหน้าต่างเพิ่มเติม ด้วยตัวระบุค่าหน้าต่าง กำหนดเมื่อหน้าต่างลูกถูกทำลาย ระบบทันทีใหม่ตัวระบุหน้าต่างเพื่อให้ช่วงของพวกเขาต่อเนื่อง.

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

Multipad ของกรอบหน้าต่างกระบวนสร้างหน้าต่าง MDI ไคลเอนต์ขณะประมวลผลข้อความWM_CREATE ตัวอย่างต่อไปนี้แสดงวิธีสร้างหน้าต่างไคลเอนต์.

กรณี WM_CRE&ATE: {CLIENTCREATESTRUCT ccs 
 
        / / เรียกหมายเลขอ้างอิงไปยังเมนูหน้าต่าง และกำหนดตัว / / แรกตัวระบุหน้าต่างลูก 
 
        ccs.hWindowMenu = GetSubMenu(GetMenu(hwnd), WINDOWMENU); 
        ccs.idFirstChild = IDM_WINDOWCHILD 
 
        / / สร้างหน้าต่าง MDI ไคลเอ็นต์ 
 
        hwndMDIClient = CreateWindow ("MDICLIENT", (LPCTSTR) NULL, WS_CHILD | WS_CLIPCHILDREN | WS_VSCROLL | WS_HSCROLL, 0, 0, 0, 0, hwnd, (HMENU) 0xCAC, hInst แอมป์ (LPSTR) ccs); 
 
        ShowWindow (hwndMDIClient, SW_SHOW); 
    } แบ่ง 

 

ชื่อเรื่องของเด็ก windows จะถูกเพิ่มไปด้านล่างของเมนูหน้าต่าง ถ้าโปรแกรมประยุกต์เพิ่มสายอักขระในเมนูหน้าต่างโดยใช้ฟังก์ชันAppendMenuสายเหล่านี้สามารถถูกเขียนทับ โดยชื่อเรื่องของหน้าต่างลูกเมื่อเมนูหน้าต่างเป็น repainted (ทุกครั้งที่หน้าต่างลูกถูกสร้าง หรือทำลาย) แอปพลิเคชัน MDI ที่เพิ่มสายอักขระของเมนูหน้าต่างควรใช้ฟังก์ชันInsertMenuและตรวจสอบว่า ชื่อเรื่องของหน้าต่างลูกได้ไม่เขียนทับสายใหม่เหล่านี้.

ใช้ลักษณะที่ WS_CLIPCHILDREN สร้างหน้าต่าง MDI ไคลเอ็นต์เพื่อป้องกันไม่ให้หน้าต่างระบายสีบน windows ของเด็ก.

Index