หมายเหตุนี้อธิบายถึงปัญหาสร้างและเป็นเจ้าของสำหรับ WinApps, DocTemplates เอกสาร เฟรม และมุมมอง คุณสามารถค้นหา ข้อมูลนี้ และอื่น ๆ น่าสนใจสร้าง และเป็นเจ้าของ ปัญหา ส่วนใหญ่ในVisual c ++ Programmer ของคำแนะนำ?
WinApp
มีวัตถุCWinAppหนึ่งในระบบ?
เป็นคอนถูกสร้างขึ้น และเริ่มต้น ด้วยการใช้งานภายในของกรอบของWinMain คุณต้องสืบทอดมาจากCWinAppทำให้สิ่งที่มีประโยชน์ (ข้อยกเว้น: นามสกุล Dll ไม่ควรมีอินสแตนซ์ที่CWinApp ทำการเตรียมใช้งานได้ในDllMainแทน)?
CWinAppวัตถุหนึ่งเป็นเจ้าของรายการของแม่แบบของเอกสาร (แบบCPtrList) ไม่มีแม่แบบเอกสารอย่าง น้อยหนึ่งสำหรับแต่ละโปรแกรมประยุกต์ DocTemplates มักจะโหลดจากแฟ้มทรัพยากร (นั่นคือ เป็นอาร์เรย์สตริง) ในCWinApp::InitInstance?
pTemplate =ใหม่ CDocTemplate (IDR_MYDOCUMENT,...);
AddDocTemplate(pTemplate)
CWinAppวัตถุหนึ่งเป็นเจ้าของหน้าต่างเฟรมทั้งหมดในแอพลิเคชัน หน้าต่างเฟรมหลักสำหรับแอพลิเคชันจะถูกเก็บไว้ในCWinApp::m_pMainWnd โดยปกติคุณตั้งค่าm_pMainWndในInitInstanceใช้งานถ้าคุณไม่ได้อนุญาตให้ AppWizard ที่ทำให้คุณ สำหรับอินเทอร์เฟซเอกสารเดี่ยว (SDI) อยู่หนึ่งCFrameWndที่ทำหน้าที่เป็นกรอบหน้าต่างโปรแกรมประยุกต์หลักเช่นเดียวกับกรอบหน้าต่างเอกสารเท่านั้น สำหรับอินเทอร์เฟซสำหรับเอกสารหลาย (MDI) นี้เป็นการ MDI-เฟรม (คลาCMDIFrameWnd) ซึ่งทำหน้าที่เป็นหน้าต่างเฟรมหลักโปรแกรมประยุกต์ที่ประกอบด้วยทั้งหมดเด็กCFrameWnds หน้าต่างแต่ละลูกมีคลาCMDIChildWnd (มาจากCFrameWnd) และทำหน้าที่เป็นหนึ่งอาจหลายเอกสารกรอบ windows?
DocTemplates
CDocTemplateเป็นผู้สร้างและจัดการเอกสาร มันเป็นเจ้าของเอกสารซึ่งเป็นสร้างงาน ถ้าโปรแกรมประยุกต์ของคุณใช้วิธีใช้ทรัพยากรที่อธิบายไว้ด้านล่าง มันจะไม่จำเป็นต้องสืบทอดมาจากCDocTemplate?
สำหรับโปรแกรมประยุกต์ SDI คลาCSingleDocTemplateยังคงติดตามการเปิดเอกสารหนึ่ง สำหรับโปรแกรมประยุกต์ MDI คลาCMultiDocTemplateเก็บรายการ (แบบCPtrList) ของเอกสารทั้งหมดเปิดอยู่ในปัจจุบันสร้างจากแม่แบบนั้น CDocTemplate::AddDocumentและCDocTemplate::RemoveDocumentให้สมาชิกเสมือนฟังก์ชันสำหรับการเพิ่ม หรือลบเอกสารจากต้นแบบ CDocTemplateเป็นเพื่อนของCDocumentเพื่อให้เราสามารถตั้งค่าการป้องกันCDocument::m_pDocTemplateกลับชี้จุดกลับไปแม่แบบเอกสารที่สร้างเอกสาร?
CWinAppจัดการการใช้ค่าเริ่มต้นOnFileOpenงาน ซึ่งจะสอบถามแม่แบบเอกสารทั้งหมดตามลำดับ รวมถึงการค้นหาเอกสารที่เปิดอยู่แล้ว และการตัดสินใจว่า รูปแบบใดในการเปิดเอกสารใหม่ใน?
CDocTemplateจัดการการรวม UI สำหรับเอกสารและเฟรม?
CDocTemplateทำให้จำนวนหมายเลขของเอกสารอ้างอิง?
CDocument
CDocumentอยู่ในสังกัดของการCDocTemplate?
เอกสารที่มีรายการของมุมมองปัจจุบันเปิดที่ (มาจากCView) ที่ดูเอกสาร (แบบCPtrList)?
เอกสารไม่สร้าง/ทำลายมุมมอง แต่อยู่ติดกันหลังจากที่มีสร้างขึ้น เมื่อเอกสารถูกปิด (นั่นคือ ถึงแฟ้ม/ปิด), มุมมองที่แนบมาทั้งหมดจะถูกปิดอยู่ เมื่อปิดมุมมองล่าสุดในเอกสาร (นั่นคือ หน้าต่าง/ปิด) เอกสารจะถูกปิด?
การCDocument::AddView, RemoveViewอินเทอร์เฟซจะใช้รักษารายการมุมมอง CDocumentเป็นเพื่อนของCViewเพื่อให้เราสามารถตั้งค่าตัวชี้หลังCView::m_pDocument?
CFrameWnd
เป็นCFrameWnd (หรือที่เรียกว่าเฟรม) เล่นบทบาทเดียวกันเช่นใน MFC 1.0 แต่ตอนนี้ ชั้นCFrameWndถูกออกแบบมาเพื่อใช้ในหลายกรณีไม่ มีการอนุพันธ์ชั้นใหม่ คลาสที่ได้รับCMDIFrameWndและCMDIChildWndจะยังปรับปรุงเพื่อให้คำสั่งมาตรฐานหลายอย่างที่มีการใช้งานเรียบร้อยแล้ว?
CFrameWndรับผิดชอบในการสร้าง windows ในพื้นที่ไคลเอ็นต์ของเฟรม โดยปกติแล้วจะมีหน้าต่างหลักหนึ่งที่กรอกข้อมูลพื้นที่ไคลเอ็นต์ของเฟรม?
สำหรับวินโดว์ MDI-เฟรม ไคลเอ็นต์เต็มกับตัวควบคุมของ MDICLIENT ซึ่งอยู่ในปกครองของหน้าต่างเฟรม MDI-เด็กทั้งหมด สำหรับวินโดว์ SDI-เฟรมหรือหน้าต่างเฟรม MDI-เด็ก ไคลเอ็นต์มักจะเต็มไปด้วยCView-มาหน้าต่างวัตถุ ในกรณีของCSplitterWndไคลเอ็นต์ของมุมมองที่เต็มไป ด้วยวัตถุหน้าต่างCSplitterWndและCView-หน้าต่างได้รับวัตถุ (หนึ่งรายการสำหรับแต่ละบานหน้าต่างแยก) ถูกสร้างเป็นเด็ก windows ของเครื่องCSplitterWnd?
หมายเหตุด้านเทคนิคตามหมายเลข|nbsp หมายเหตุด้านเทคนิคตามประเภท(&N)