CConnectionPoint

คลา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)

Index