ActiveX控件是微軟進軍internet的有利武器,市場上形形色色的ActiveX控件也真正地帶給了人們便利,下面我簡單總結一下MFC開發ActiveX控件的方法。如需要代碼者請留下聯系方式。
一、在MFC項利用程序向導生成基本的程序框架。
二、修改一下資源試圖里的位圖,那就是你發布后的控件圖標,一定要整的漂亮點。
三、在控件接口下面加入庫存屬性,就是顏色,標題,字體一類的屬性,向導自動添加如下屬性入口???
??????????????? BEGIN_DISPATCH_MAP,
??????????????? DISP_STOCKPROP_CAPTION()
??????????????? DISP_STOCKPROP_FONT()
??????????????? DISP_STOCKPROP_FORECOLOR()
??????????????? END_DISPATCH_MAP()
????? 這些屬性只能通過PUT_屬性名()和GET_屬性名()進行修改。庫存屬性的值由COloControl來維護,例如設置背景顏色之后,COloControl調用SetBackColor()自動調用OnBackColorChanged()函數是控件無效從而導致重繪
四、添加你的功能函數。
五、添加你得自定義屬性。ActiveX控件支持四種自定義屬性
???????? DISP_PROPERTY.? DISP_PPOPERTY_NOTIFY???? DISP_PROPERTY_EX???? DISP_[ROPERTY_PARAM
???????? 注意:添加自定義屬性要在控件的實現類下,而不是在控件的接口下面。如果你的自定義屬性是一個BOOL 型的應和DISP_PPOPERTY_NOTIFY? 對應 。
????? 以下是我的自定義屬性舉例
????? DISP_PROPERTY_NOTIFY_ID?? (CMfcCirCtrlCtrl,"CircleShape",dispidCircleShape,? m_CircleShape, OnCircleShapeChanged, VT_BOOL)
?DISP_PROPERTY_EX_ID(CMfcCirCtrlCtrl, "CircleOffset", dispidCircleOffset, GetCircleOffset, SetCircleOffset, VT_I2)
六、添加事件,這一步也是在控件的實現類下面完成,記住VC.NET中的內部名稱不同于VC6中的,.NET中的內部名稱和事件名相同,例如你添加一個ClickIn的事件,VC.NET中的內部事件也是ClickIn,而在 VC6中會是Fire_CickIn.
?? 向導作如下添加:
?? BEGIN_EVENT_MAP(CMfcCirCtrlCtrl, COleControl)
??? EVENT_CUSTOM_ID("ClickIn", eventidClickIn, ClickIn, VTS_XPOS_PIXELS VTS_YPOS_PIXELS)
?? END_EVENT_MAP()
?? 并在頭文件中添加如下代碼
?? void ClickIn(OLE_XPOS_PIXELS x, OLE_YPOS_PIXELS y)
??? {
??????? FireEvent(eventidClickIn, EVENT_PARAM(VTS_XPOS_PIXELS VTS_YPOS_PIXELS), x, y);
??? }
七、實現屬性表。庫存屬性在VC6會自動做添加下面一行:
?????? PROPPAGEID(CLSID_CColorPropPage)
?????? 而在VC.NET中部添加上面那行,只有默認的屬性表。
?
以上是我在學習過程中的一點總結,本人有相應的全部代碼,如有需要者請留下聯系方式,我會發給你們的。
??