自訂方法與預設方法不同,因為它們尚未由COleControl實作。 您必須為每個新增至控件的自定義方法提供實作。
這很重要
ActiveX 是不應該用於新開發的舊版技術。 如需取代 ActiveX 的新式技術詳細資訊,請參閱 ActiveX 控件。
ActiveX 控制項使用者可以隨時呼叫自定義方法,以執行控件特定的動作。 自定義方法的分派對應專案是格式「DISP_FUNCTION」。
使用 [新增方法精靈] 新增自定義方法
下列程式示範將自定義方法 PtInCircle 新增至 ActiveX 控制項的基本架構程式代碼。 PtInCircle 會判斷傳遞至控件的座標是否在圓形內部或外部。 這個相同的程序也可以用來新增其他自訂方法。 將自定義方法名稱和其參數取代為 PtInCircle 方法名稱和參數。
備註
此範例會使用 InCircle 來自事件一文的 函式。 如需此函式的詳細資訊,請參閱 MFC ActiveX 控件:將自定義事件新增至 ActiveX 控件一文。
使用 [新增方法精靈] 新增 PtInCircle 自定義方法
載入控件的專案。
在 [類別檢視視圖] 中,展開控制項的程式庫節點。
以滑鼠右鍵單擊控件的介面節點(連結庫節點的第二個節點),以開啟快捷方式功能表。
從快捷方式功能表中,按兩下 [ 新增 ],然後按下 [ 新增方法]。
這會開啟 [新增方法精靈]。
在 [ 方法名稱] 方塊中,輸入 PtInCircle。
在 [ 內部名稱] 方塊中,輸入方法的內部函式名稱或使用預設值(在此案例中為 PtInCircle)。
在 傳回類型 方塊中,按一下 VARIANT_BOOL 作為方法的傳回類型。
使用 [參數類型 ] 和 [ 參數名稱] 控件,新增名為 xCoord 的參數(類型 OLE_XPOS_PIXELS)。
使用參數類型和參數名稱控件,新增名為 yCoord 的參數(類型OLE_YPOS_PIXELS)。
按一下完成。
新增自定義方法的方法精靈變更
當您新增自定義方法時,[新增方法精靈] 會對控件類別標頭進行一些變更(。H) 和實作 (.CPP) 檔案。 以下這一行會新增到控制類別標頭檔中的分派對應宣告 (.H) 檔案:
VARIANT_BOOL PtInCircle(OLE_XPOS_PIXELS xCoord, OLE_YPOS_PIXELS yCoord);
此程式代碼會宣告名為 PtInCircle的分派方法處理程式。 控制使用者可以使用外部名稱 PtInCircle呼叫此函式。
下列這一行會新增至 控制件的 。IDL 檔案:
[id(1), helpstring("method PtInCircle")] VARIANT_BOOL PtInCircle(OLE_XPOS_PIXELS xCoord, OLE_YPOS_PIXELS yCoord);
這一行會 PtInCircle 指派方法特定的標識碼、方法在 [新增方法精靈] 方法和屬性清單中的位置。 因為使用 [新增方法精靈] 新增了自定義方法,因此該方法的項目自動新增至專案的.IDL檔案中。
此外,下列這一行位於控制類別的實作檔案(.CPP)中,並新增至該控制項的分派對應:
DISP_FUNCTION_ID(CMyAxUICtrl, "PtInCircle", dispidPtInCircle, PtInCircle, VT_BOOL, VTS_XPOS_PIXELS VTS_YPOS_PIXELS)
DISP_FUNCTION 巨集會將方法 PtInCircle 對應至控件的處理程式函式 PtInCircle,將傳回型別宣告為 VARIANT_BOOL,並宣告兩個參數,類型分別為 VTS_XPOS_PIXELS 和 VTS_YPOSPIXELS,傳遞至 PtInCircle。
最後,[新增方法精靈] 會將存根函 CSampleCtrl::PtInCircle 式新增至控件實作的底部 (。CPP) 檔案。 若要 PtInCircle 如先前所述運作,必須修改如下:
VARIANT_BOOL CMyAxUICtrl::PtInCircle(OLE_XPOS_PIXELS xCoord, OLE_YPOS_PIXELS yCoord)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CPoint point(xCoord, yCoord);
return InCircle(point);
}