สร้างหน้าต่างลูก

เมื่อต้องการสร้างหน้าต่างลูก MDI แอปพลิเคชันสามารถเรียกใช้ฟังก์ชันCreateMDIWindowหรือส่งข้อความWM_MDICREATEให้หน้าต่าง MDI ไคลเอ็นต์ (โปรแกรมประยุกต์ที่สามารถใช้ฟังก์ชันCreateWindowExด้วยลักษณะ WS_EX_MDICHILD เพื่อสร้าง windows ลูก MDI) แอปพลิเคชัน MDI งเกิลเธสามารถใช้วิธีใดในการสร้างหน้าต่างลูก เธรดในโปรแกรมประยุกต์ MDI ไม่ต้องใช้ฟังก์ชันCreateMDIWindowหรือCreateWindowExเพื่อสร้างหน้าต่างลูกในเธรดอื่น.

พารามิเตอร์lParam WM_MDICREATE ข้อความจะเป็นตัวชี้ที่ไกลตัวโครงสร้างMDICREATESTRUCT โครงสร้างประกอบด้วยสมาชิกสี่ของขนาด: xและyซึ่งระบุตำแหน่งแนวนอน และแนวตั้งของ หน้าต่าง และcxและcyซึ่งระบุ extents แนวนอน และแนวตั้งของหน้าต่าง ใด ๆ ของสมาชิกเหล่านี้อาจถูกกำหนดอย่างชัดเจน โดยโปรแกรมประยุกต์ หรือพวกเขาอาจถูกตั้งค่าเป็น CW_USEDEFAULT กรณีระบบเลือกตำแหน่ง ขนาด หรือทั้งสอง อย่าง ตามการเป็นอัลกอริทึมแบบเรียงซ้อน ในกรณีใด ๆ ทั้งหมด 4 สมาชิกต้องสามารถเริ่มต้น Multipad CW_USEDEFAULT ที่ใช้สำหรับมิติทั้งหมด.

สมาชิกล่าสุดของโครงสร้างMDICREATESTRUCTคือสมาชิกลักษณะซึ่งอาจประกอบด้วยลักษณะบิตสำหรับหน้าต่าง เมื่อต้องการสร้างหน้าต่างลูก MDI ที่สามารถมีการรวมกันของลักษณะหน้าต่าง ระบุลักษณะหน้าต่าง MDIS_ALLCHILDSTYLES เมื่อลักษณะนี้ไม่มีระบุ หน้าต่างที่ลูก MDI มีลักษณะ WS_MINIMIZE, WS_MAXIMIZE, WS_HSCROLL และ WS_VSCROLL เป็นการตั้งค่าเริ่มต้น.

Multipad สร้างลูก MDI ของ windows โดยใช้ฟังก์ชัน AddFile ของภายในกำหนด (อยู่ในแฟ้มแหล่งที่มา MPFILEC) . The AddFile ฟังก์ชันกำหนดชื่อเรื่องของหน้าต่างลูก โดยกำหนดให้สมาชิกszTitleของโครงสร้างของMDICREATESTRUCTของหน้าต่างกับทั้งชื่อ ของแฟ้มถูกแก้ไข หรือ "ไม่มี ชื่อ สมาชิกszClassถูกตั้งค่าเป็นชื่อของคลาหน้าต่างลูก MDI ลงทะเบียนในฟังก์ชัน InitializeApplication ของ Multipad สมาชิกhOwnerถูกตั้งค่าเป็นหมายเลขอ้างอิงของอินสแตนซ์ของโปรแกรมประยุกต์.

ตัวอย่างต่อไปนี้แสดงฟังก์ชัน AddFile ใน Multipad.

HWND &APIENTRY AddFile(pName) CHAR * pName 
{HWND hwnd 
    CHAR sz [160]; 
    เอ็มซี MDICREATESTRUCT 
 
    ถ้า (! pName) { / / ถ้าพารามิเตอร์ pName เป็น NULL โหลด "ไม่มีชื่อ" / / สตริงที่จากทรัพยากร STRINGTABLE และ szTitle ที่ตั้ง / / สมาชิกของ MDICREATESTRUCT 
 
        LoadString (hInst, IDS_UNTITLED, sz, sizeof(sz)) 
        mcs.szTitle = sz (LPCTSTR) 
    } อื่น / / ชื่อเรื่องหน้าต่าง ด้วยพาธเต็มและชื่อแฟ้ม, / / ขอรับได้ ด้วยการเรียกฟังก์ชัน OpenFile กับการ / / OF_PARSE ธง ซึ่งถูกเรียกก่อน AddFile() 
 
        mcs.szTitle = of.szPathName 
 
    mcs.szClass = szChild 
    mcs.hOwner = hInst 
 
    / / ใช้ขนาดเริ่มต้นสำหรับหน้าต่างลูก 
 
    mcs.x = mcs.cx = CW_USEDEFAULT 
    mcs.y = mcs.cy = CW_USEDEFAULT 
 
    / / ให้หน้าต่างลูกลักษณะเริ่มต้น StyleDefault / / กำหนดตัวแปรใน MULTIPADC. mcs.style = styleDefault 
 
    / / บอกหน้าต่าง MDI ไคลเอ็นต์เพื่อสร้างหน้าต่างลูก 
 
    hwnd =เรียก sendmessage ระหว่างงาน (HWND) (hwndMDIClient, WM_MDICREATE, 0 แอมป์ (LPMDICREATESTRUCT) (นาน) mcs); 
 
    / / ถ้าพบแฟ้ม อ่านเนื้อหาลงในเด็ก / / พื้นที่ไคลเอ็นต์ของหน้าต่าง 
 
    ถ้า (pName) {if (LoadFile (hwnd, pName)) { / / ไม่สามารถโหลดแฟ้ม ปิดหน้าต่าง 
 
            เรียก sendmessage ระหว่างงาน (hwndMDIClient, WM_MDIDESTROY, (DWORD) hwnd, 0 L); 
        }} กลับ hwnd 
} 

 

ตัวชี้ที่ส่งผ่านพารามิเตอร์lParam WM_MDICREATEข้อความจะถูกส่งผ่านไปยังฟังก์ชันCreateWindowและปรากฏเป็นสมาชิกแรกในโครงสร้างCREATESTRUCTส่งผ่านข้อความWM_CREATE เริ่มใน Multipad หน้าต่างลูกต้นเองในระหว่างการประมวลผล โดยการเตรียมใช้งานตัวแปรเอกสารในข้อมูลพิเศษ และ ด้วยการสร้างหน้าต่างลูกของตัวควบคุมการแก้ไขข้อความการ WM_CREATE.

Index