การใช้กล่องโต้ตอบ

มีสองวิธีในการเพิ่มกล่องโต้ตอบโครงการของคุณ ATL: ใช้ตัวช่วยสร้างวัตถุ ATL หรือเพิ่มด้วยตนเอง?

การเพิ่มกล่องโต้ตอบกับตัวช่วยสร้างวัตถุ ATL

ใน ATL วัตถุ Wizard (เมนูแทรกคำสั่งวัตถุ ATL ใหม่), เน้นประเภทเบ็ดเตล็ดในบานหน้าต่างด้านซ้าย แล้วคลิกสองครั้งวัตถุการโต้ตอบในบานหน้าต่างด้านขวาเมื่อต้องการเพิ่มกล่องโต้ตอบโครงการ ATL กรอกข้อมูลลงในกล่องโต้ตอบคุณสมบัติตัวช่วยสร้างวัตถุ ATLตามความเหมาะสม และคลิกตกลง ตัวช่วยสร้างวัตถุ ATL เพิ่มคลาสที่ได้รับมาจากCAxDialogImplโครงการของคุณ และเปิดตัวแก้ไขทรัพยากรกับแม่แบบของกล่องโต้ตอบ?

หมายเหตุnbsp  ถ้ากล่องโต้ตอบของคุณได้รับมาจากCAxDialogImplคุณสามารถโฮสต์ตัวควบคุม ActiveX ทั้ง Windows ถ้าคุณไม่ต้องการค่าใช้จ่ายในการสนับสนุนตัวควบคุม ActiveX ในชั้นการกล่องโต้ตอบของคุณ ใช้CSimpleDialogหรือCDialogImplแทน(&N)?

ตัวจัดการเหตุการณ์และข้อความสามารถเพิ่มคลาสคุณโต้ตอบจาก ClassView ในทางเดียวกันเป็นไปมีคลาส MFC ใน ClassView ชั้นการคลิกขวา และเลือกตัวจัดการข้อความ Windows เพิ่มเพื่อเปิดกล่องโต้ตอบข้อความของ Windows ใหม่และตัวจัดการเหตุการณ์ ดูข้อมูลเพิ่มเติมการเพิ่มตัวจัดการข้อความ?

เมื่อต้องการเปิดกล่องโต้ตอบข้อความของ Windows ใหม่และตัวจัดการเหตุการณ์จากกล่องโต้ตอบแม่ คลิกขวาที่ตัวควบคุมในแบบกล่องโต้ตอบ และเลือกคำสั่งเหตุการณ์จากเมนูทางลัด ในโครงการ ATL คลาสกล่องโต้ตอบถูกเน้นไว้ในกล่องคลาสหรือวัตถุเพื่อจัดการ ขณะ สำหรับโครงการ MFC ตัวควบคุมถูกเลือก?

การเพิ่มกล่องโต้ตอบด้วยตนเอง

การใช้กล่องโต้ตอบคล้ายกับการใช้งานหน้าต่าง คุณชั้นที่ได้สืบทอดมาจากCAxDialogImpl, CDialogImplหรือCSimpleDialogและประกาศการแมปข้อความการจัดการกับข้อความ อย่างไรก็ตาม คุณต้องระบุ ID ทรัพยากรของต้นแบบการโต้ตอบในชั้นเรียนของคุณได้รับด้วย ชั้นของคุณต้องมีข้อมูลสมาชิกเรียกว่า IDD เพื่อเก็บค่านี้?

หมายเหตุnbsp  เมื่อคุณสร้างกล่องโต้ตอบโดยใช้ตัวช่วยสร้างวัตถุ ATL ตัวช่วยสร้างจะเพิ่ม IDD สมาชิกเป็นชนิดที่มีenum(&N)?

CDialogImplช่วยให้คุณสามารถนำการ modal หรือกล่องโต้ตอบสร้างที่โฮสต์การควบคุม Windows CAxDialogImplช่วยให้คุณสามารถนำการ modal หรือกล่องโต้ตอบสร้างที่เป็นโฮสต์ให้ตัวควบคุม ActiveX และ Windows ทั้ง?

เมื่อต้องการสร้างกล่องโต้ตอบโมดอล สร้างอินสแตนซ์ของCDialogImplของคุณ-มา (หรือCAxDialogImpl-มา) คลาส และจึง เรียกเมธอดDoModal เมื่อต้องการปิดกล่องโต้ตอบโมดอล เรียกเมธอดEndDialogจากตัวจัดการข้อความ เมื่อต้องการสร้างกล่องโต้ตอบสร้าง เรียกเมธอดสร้างแทนของDoModal การทำลายกล่องโต้ตอบสร้าง โทรDestroyWindow?

ถ้าวัตถุที่กล่องโต้ตอบของคุณประกอบด้วยตัวควบคุม ActiveX และคุณจะจัดการกับเหตุการณ์จากตัวควบคุมเหล่านี้ คุณจะต้องแนะนำ และ unadvise อินเทอร์เฟซการควบคุม ActiveX ทั้งหมด นี้สามารถทำได้ โดยเพิ่มบรรทัดต่อไปนี้ของรหัสของคุณ InitDialog ฟังก์ชัน:

AtlAdviseSinkMap (pMyDlg, TRUE)

Unadvise ตัวควบคุม ActiveX เพิ่มบรรทัดต่อไปนี้ของรหัสของคุณ EndDialog ฟังก์ชัน (หรือฟังก์ชันเรียกใช้เมื่อสิ้นสุดของกล่องโต้ตอบวัตถุ):

AtlAdviseSinkMap (pMyDlg, FALSE)

ใช้ตัวจัดการข้อความของกล่องโต้ตอบ ตามที่คุณต้องการในตัวจัดการในแบบCWindowImpl-มาคลา ถ้ามีค่าที่ส่งกลับเฉพาะข้อความ กลับเป็นการ LRESULT การส่งกลับ LRESULT ค่าจะถูกแมป โดย ATL สำหรับการจัดการที่เหมาะสมโดยตัวจัดการการโต้ตอบของ Windows สำหรับรายละเอียด ดูรหัสแหล่งมาสำหรับCDialogImplBaseT::DialogProcใน atlwin.h?

ตัวอย่าง

เรียนต่อไปนี้ใช้กล่องโต้ตอบ:

คลา CMyDialog: สาธารณะ CDialogImplltCMyDialog >, ...
{
สาธารณะ:
   enum { IDD = IDD_MYDIALOG };

BEGIN_MSG_MAP(CMyDialog)
      MESSAGE_HANDLER (WM_INITDIALOG, OnInitDialog)
   END_MSG_MAP()

LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
   {
      / / ทำการเตรียมใช้งานบางรหัส
      ส่งกลับค่า 1
   }
}

Index