คลาCConnectionPointกำหนดชนิดพิเศษของอินเทอร์เฟซที่ใช้ในการติดต่อสื่อสารกับวัตถุ OLE อื่น การเรียกว่า "จุดเชื่อมต่อ แตกต่างจากปกติ OLE interfaces ซึ่งใช้ในการใช้ และการเปิดเผยการทำงานของตัวควบคุม OLE จุดเชื่อมต่อใช้อินเทอร์เฟซที่ขาออกที่ไม่สามารถเริ่มต้นการดำเนินการบนวัตถุอื่น เช่น firing เหตุการณ์ และการเปลี่ยนแปลงการแจ้งเตือน?
เชื่อมประกอบด้วยสองส่วน: วัตถุอินเทอร์เฟซ เรียกว่า "ต้นฉบับ" และวัตถุนำมาบังคับใช้อินเทอร์เฟซ ในการโทรเรียกว่าการ "อ่าง โดยจุดเชื่อมต่อการเปิดเผย แหล่งอนุญาตให้เก็บเพื่อสร้างการเชื่อมต่อกับตัวเอง ผ่านกลไกที่จุดเชื่อมต่อ วัตถุต้นฉบับได้รับเป็นตัวชี้การใช้งานของอ่างของชุดของสมาชิกฟังก์ชัน ตัวอย่างเช่น ลั่นเหตุการณ์ที่นำมาใช้ โดยอ่าง แหล่งสามารถเรียกวิธีการที่เหมาะสมของการใช้งานของอ่าง?
โดยค่าเริ่มต้น การCOleControl-ชั้นที่ได้รับใช้จุดเชื่อมต่อที่สอง: สำหรับเหตุการณ์อย่างใดอย่างหนึ่งและอีกหนึ่งคุณสมบัติที่เปลี่ยนแปลงการแจ้งเตือน มีใช้การเชื่อมต่อเหล่านี้ ตามลำดับ สำหรับเหตุการณ์เผา และแจ้งให้ทราบในอ่าง (ตัวอย่างเช่น คอนเทนเนอร์ของตัวควบคุม) เมื่อค่าของคุณสมบัติมีการเปลี่ยนแปลง การสนับสนุนมีให้สำหรับตัวควบคุม OLE ใช้จุดเชื่อมต่อเพิ่มเติมเช่นกัน สำหรับจุดเชื่อมต่อเพิ่มเติมแต่ละในคลาสตัวควบคุมของคุณ คุณต้องประกาศ "เชื่อมต่อส่วน" การใช้จุดเชื่อมต่อ หากคุณใช้จุดเชื่อมต่ออย่าง น้อยหนึ่ง คุณต้องประกาศเดียว "แผนผังการเชื่อมต่อ" ในคลาสตัวควบคุมของคุณ?
ตัวอย่างต่อไปนี้สาธิตการแผนผังการเชื่อมต่อที่ง่ายและจุดเชื่อมต่อสำหรับการ Sample
คอนโทรล OLE อันประกอบด้วยการกระจายตัวที่สองของรหัส: ส่วนแรกประกาศแผนผังการเชื่อมต่อกับจุด ที่สองใช้แผนผังและจุดนี้ ส่วนแรกจะถูกแทรกลงในปฏิญญาสากลว่าด้วยการควบคุมคลาส ภายใต้ส่วนการป้องกัน
nbsp / เชื่อมต่อจุดสำหรับอินเทอร์เฟซสำหรับ ISample
BEGIN_CONNECTION_PART (CSampleCtrl, SampleConnPt)
CONNECTION_IID(IID_ISampleSink)
END_CONNECTION_PART(SampleConnPt)
DECLARE_CONNECTION_MAP()(&N)
แมโคBEGIN_CONNECTION_PARTและEND_CONNECTION_PARTประกาศการฝังตัวคลาส XSampleConnPt
(มาจากCConnectionPoint) ที่ใช้จุดเชื่อมต่อเฉพาะนี้ ถ้าคุณต้องการแทนที่ฟังก์ชันใด ๆ สมาชิกCConnectionPointหรือเพิ่มสมาชิกฟังก์ชันของคุณเอง ประกาศเหล่านั้นระหว่างแมโครเหล่านี้สอง ตัวอย่างเช่น แมโคCONNECTION_IIDแทนฟังก์ชันสมาชิกCConnectionPoint::GetIIDที่วางไว้ระหว่างแมโครเหล่านี้สอง?
ส่วนรหัสสองจะถูกแทรกลงในแฟ้มใช้งาน (CPP) ของคลาสตัวควบคุมของคุณ รหัสนี้ใช้การแมปเชื่อมต่อ ซึ่งประกอบด้วยจุดเชื่อมต่อเพิ่มเติมSampleConnPt
:
BEGIN_CONNECTION_MAP (CSampleCtrl, COleControl)
nbsp CONNECTION_PART (CSampleCtrl, IID_ISampleSink, SampleConnPt)
END_CONNECTION_MAP()(&N)
เมื่อการกระจายตัวของรหัสเหล่านี้ได้ถูกแทรก ตัวอย่าง OLE ควบคุม exposes จุดเชื่อมต่อสำหรับอินเทอร์เฟซสำหรับISampleSink?
โดยปกติ จุดเชื่อมต่อสนับสนุน "multicasting" ความสามารถในการออกอากาศไปเก็บหลายการเชื่อมต่อกับอินเทอร์เฟสเดียวกัน ส่วนรหัสต่อไปนี้สาธิตวิธีการทำ multicasting โดยวนผ่านแต่ละอ่างในจุดเชื่อมต่อ:
โมฆะ CSampleCtrl::CallSinkFunc()
{
nbsp const CPtrArray * pConnections = m_xSampleConnPt.GetConnections()
ASSERT (pConnections ! = NULL);
int cConnections = pConnections - > GetSize()
ISampleSink * pSampleSink
สำหรับ (int ฉัน = 0 ฉัน < cConnections; i ++)
{
pSampleSink = (ISampleSink *) (pConnections - > GetAt(i))
ASSERT (pSampleSink ! = NULL);
pSampleSink - > SinkFunc()
}
}
ตัวอย่างนี้ดึงข้อมูลชุดปัจจุบันของการเชื่อมต่อบน SampleConnPt
จุดเชื่อมต่อกับการเรียกไปยัง CConnectionPoint::GetConnections
แล้วคำนวณซ้ำผ่านการเชื่อมต่อและเรียกใช้ ISampleSink::SinkFunc
บนทุกการเชื่อมต่อที่ใช้งานอยู่?
ดูบทความสำหรับข้อมูลเพิ่มเติมเกี่ยวกับการใช้CConnectionPoint, จุดเชื่อมต่อในVisual c ++ Programmer ของคำแนะนำ?
#รวม lt;afxctl.h>
สมาชิกของคลาส|nbsp คลาสพื้นฐาน| แผนภูมิของลำดับชั้น(&N)