ขณะนี้คุณจะต้องเพิ่ม ClickIn และ ClickOut เหตุการณ์เพื่อควบคุมของคุณ ATL คุณจะไฟ ClickIn เหตุการณ์ถ้าผู้ใช้คลิภายในรูปหลายเหลี่ยมและไฟ ClickOut หากผู้ใช้คลิกภายนอก?
เมื่อคุณสร้างตัวควบคุมแบบเต็มในขั้นตอนที่ 2 คุณเลือก box.nbsp ตรวจสอบจุดเชื่อมต่อการสนับสนุน นี้สร้าง IPolyCtlEvents อินเทอร์เฟซในแฟ้มของคุณ.idl หมายเหตุที่ชื่ออินเทอร์เฟซเริ่มต้น ด้วยการขีดเส้นใต้ นี่คือแบบแผนเพื่อบ่งชี้ว่า อินเทอร์เฟซที่เป็นอินเทอร์เฟซภายใน ปาน โปรแกรมที่อนุญาตให้คุณเรียกดูวัตถุ COM สามารถเลือกไม่แสดงอินเทอร์เฟซสำหรับผู้ใช้ นอกจากนี้ประกาศในไฟล์.idl ที่จุดเชื่อมต่อการสนับสนุนเพิ่มบรรทัดเพื่อบ่งชี้ว่า IPolyCtlEvents มีอินเทอร์เฟซสำหรับแหล่งข้อมูลเริ่มต้น แอตทริบิวต์ของแหล่งข้อมูลบ่งชี้ว่า ตัวควบคุมมีแหล่งที่มาของการแจ้งเตือน ดังนั้นมันจะเรียกอินเทอร์เฟซนี้บนคอนเทนเนอร์(&N)?
ขณะนี้คุณควรเพิ่มวิธีการ ClickIn และ ClickOut ไป IPolyCtlEvents อินเทอร์เฟซ:
IPolyCtlEvents ในClassViewและMethod
เพิ่มที่เลือกจากเมนูแบบผุดขึ้น?void?ClickIn ในกล่องชื่อเมธอด?[in] long x, [in] long y ในกล่องพารามิเตอร์?
ตรวจสอบแฟ้ม.idl เพื่อดูว่า มีเพิ่มรหัสถูกเป็นวิธีการ IPolyCtlEvents dispinterface.nbsp จากนั้น ใช้กระบวนการเดียวกันเพื่อกำหนดเป็น ClickOut วิธี ด้วยพารามิเตอร์เดียวกันและส่งกลับชนิด Dispinterface การ IPolyCtlEvents ในแฟ้มของคุณ.idl ควรมีลักษณะดังนี้(&N):
dispinterface _IPolyCtlEvents
{
คุณสมบัติ:
วิธีการ:
[id(1), helpstring ("วิธี ClickIn ")] โมฆะ ClickIn ([ใน] ยาว x, [ใน] ยาว y);
[id(2), helpstring ("วิธี ClickOut")] โมฆะ ClickOut ([ใน] ยาว x, [ใน] ยาว y);
}
ClickInและ ClickOut วิธีการที่ใช้เวลา x และ y ของจุด clicked คู่เป็นพารามิเตอร์?
ตอนนี้ สร้างไลบรารีชนิด การทำเช่นนี้ คุณสามารถทั้งสร้างโครงการของคุณ หรือคลิกขวาไฟล์.idl ในFileViewและคลิกCompile Polygon.idl นี้จะสร้างแฟ้ม Polygon.tlb ซึ่งเป็นไลบรารีชนิด?
ถัดไป ใช้อินเทอร์เฟซจุดเชื่อมต่อและติดต่อคอนเทนเนอร์จุดเชื่อมต่อสำหรับตัวควบคุมของคุณ (ใน COM เหตุการณ์มีการใช้งานผ่านกลไกของจุดเชื่อมต่อ การรับเหตุการณ์จากวัตถุ COM คอนเทนเนอร์ที่สร้างการเชื่อมต่อที่แนะนำไปยังจุดเชื่อมต่อที่ใช้วัตถุ COM เนื่องจากวัตถุ COM สามารถมีจุดเชื่อมต่อหลาย วัตถุ COM ยังใช้จุดเชื่อมต่ออินเทอร์เฟซคอนเทนเนอร์ ผ่านอินเทอร์เฟซนี้ ในคอนเทนเนอร์สามารถกำหนดจุดเชื่อมต่อที่ได้รับการสนับสนุน) อินเทอร์เฟซที่ใช้จุดเชื่อมต่อเรียกว่าIConnectionPointและอินเทอร์เฟซที่บรรจุจุดเชื่อมต่อที่ใช้เรียกว่าIConnectionPointContainer?
เพื่อช่วยในการใช้IConnectionPointใช้ClassViewในการเข้าถึงตัวช่วยสร้างจุดเชื่อมต่อ ตัวช่วยสร้างนี้สร้างอินเทอร์เฟซสำหรับIConnectionPointโดยไลบรารีชนิดของการอ่าน และการใช้งานฟังก์ชันสำหรับแต่ละเหตุการณ์ที่สามารถ fired?
เมื่อต้องการเรียกใช้ตัวช่วยสร้าง ทำตามขั้นตอนเหล่านี้:

ถ้าคุณดูแฟ้ม PolygonCP.h สร้างขึ้นในFileViewคุณเห็นมีชั้นเรียกว่า CProxy_PolyCtlEvents ที่ได้มาจากIConnectionPointImpl นอกจากนี้ PolygonCP.h ยังกำหนดวิธีการสองวิธี Fire_ClickIn และ Fire_ClickOut ซึ่งใช้พารามิเตอร์พิกัดที่สอง เหล่านี้เป็นวิธีการคุณเรียกใช้เมื่อคุณต้องการใช้ไฟเหตุการณ์จากการควบคุมของคุณ?
ตัวช่วยสร้างยังเพิ่มCProxy_PolyEventsและIConnectionPointContainerImplของตัวควบคุมหลายสืบทอด list.nbsp ตัวช่วยสร้างการเปิดเผยIConnectionPointContainerนอกจากนี้สำหรับคุณ โดยการเพิ่มรายการที่เหมาะสมกับแผนที่ COM(&N)?
คุณใช้รหัสเพื่อสนับสนุนกิจกรรมเสร็จเรียบร้อยแล้ว ขณะนี้ เพิ่มบางรหัสลั่นเหตุการณ์ในขณะที่เหมาะสม จำไว้ คุณจะไฟแบบ ClickIn หรือ ClickOut เหตุการณ์เมื่อผู้ใช้คลิกที่ปุ่มเมาส์ด้านซ้ายในตัวควบคุม เมื่อต้องการค้นหาเมื่อผู้ใช้คลิกที่ปุ่ม แรกเพิ่มตัวจัดการข้อความWM_LBUTTONDOWN ในClassViewคลิกขวาบนคลา CPolyCtl และเลือกเพิ่ม Windows ข้อจัดการ...จาก menu.nbsp ลัด เลือกWM_LBUTTONDOWNจากรายการทางด้านซ้าย แล้วคลิกที่ปุ่ม'ตัวจัดการเพิ่ม คลิกตกลง(&N)?
ถัดไป เพิ่มรหัสใหม่ไปยังฟังก์ชันOnLButtonDownใน PolyCtl.h (ลบรหัสใด ๆ ที่วางไว้ โดยตัวช่วยสร้าง) เพื่อให้OnLButtonDownตอนนี้มีลักษณะดังนี้:
LRESULT CPolyCtl::OnLButtonDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOLamp; bHandled)
{
HRGN hRgn
WORD xPos = LOWORD(lParam) / / แนวนอนตำแหน่งของเคอร์เซอร์
WORD yPos = HIWORD(lParam) / / แนวตั้งตำแหน่งของเคอร์เซอร์
CalcPoints(m_rcPos)
/ / สร้างขอบเขตจากรายการของเราของจุด
hRgn = CreatePolygonRgn (& m_arrPoint [0] m_nSides ชอน);
/ / ถ้าจุด clicked อยู่ในรูปหลายเหลี่ยมของเรา แล้วไฟ ClickIn
/ / เหตุการณ์อื่นที่เราไฟเหตุการณ์ ClickOut
ถ้า (PtInRegion (hRgn, xPos, yPos))
Fire_ClickIn (xPos, yPos);
อื่น
Fire_ClickOut (xPos, yPos);
/ / ลบขอบเขตที่เราสร้างขึ้น
DeleteObject(hRgn)
ส่งกลับค่า 0
}
เนื่องจากคุณมีแล้วคำนวณคะแนนได้ของรูปหลายเหลี่ยมในการ OnDraw งาน ใช้ใน OnLButtonDown เพื่อสร้างขอบเขต ใช้ฟังก์ชันPtInRegion API เพื่อตรวจสอบว่า จุด clicked ภายในรูปหลายเหลี่ยม หรือไม่แล้ว?
การ uMsg พารามิเตอร์เป็น ID ของข้อความของ Windows ที่ได้รับการจัดการ นี้ช่วยให้คุณมีฟังก์ชันหนึ่งที่จัดการกับช่วงของข้อความ wParamและ lParam เป็นค่ามาตรฐานสำหรับข้อความได้รับการจัดการ พารามิเตอร์ bHandled อนุญาตให้คุณระบุว่า ฟังก์ชันการจัดการข้อความ หรือไม่ โดยค่าเริ่มต้น ตั้งค่าเป็นTRUEเพื่อบ่งชี้ว่า ฟังก์ชันการจัดการข้อความ แต่คุณสามารถตั้งค่าให้เป็น FALSE. การทำเช่นนี้จะทำให้เกิด ATL สืบค้นหาฟังก์ชันอื่นของตัวจัดการข้อความการส่งข้อความ?
ตอนนี้ ลองใช้เหตุการณ์ของคุณ สร้างตัวควบคุม และเริ่มActiveX Control คอนเทนเนอร์ทดสอบอีกครั้ง เวลานี้ ดูแฟ้มบันทึกเหตุการณ์ window.nbsp กระบวนการผลิตเหตุการณ์ไปยังหน้าต่างแสดงผล เลือกเข้าสู่ระบบจากเมนูตัวเลือกและเลือกการล็อกเอาต์พุหน้าต่าง แทรกตัวควบคุมขณะนี้ และลองคลิกในหน้าต่าง สังเกตว่า ClickIn คือ fired ถ้าคุณคลิกในรูปหลายเหลี่ยมเติม และ ClickOut คือ fired เมื่อคุณคลิกภายนอกของมัน(&N)?
ถัดไป ที่คุณจะเพิ่มหน้าคุณสมบัติ?
|Nbspกลับไปยังขั้นตอนที่ 4 ขั้นตอนที่ 6(&N)