VS2005编写ActiveX控件

今天因工作需要,再次拿起VC编写了一个demo的Active控件,以验证属性、方法、事件在C#宿主程序中的使用情况。

  • 如何添加属性

在类视图中选择接口,右键后选择“添加属性”。属性添加完毕后,需要回到Ctrl类来编写对属性操作的代码,如:


  • 如何添加方法

在类视图中选择接口,右键后选择“添加方法”。

  • LONG CMyActiveXDemoCtrl::DemoGetStrLen(LPCTSTR _str1)
    {
    	AFX_MANAGE_STATE(AfxGetStaticModuleState());
    
    	// TODO: 在此添加调度处理程序代码
    
    	//[触发一个事件,看宿主程序是否能响应。
    	DemoEvent1(_str1);
    	//]
    
    	//返回长度
    	return lstrlen(_str1);
    }

  • 如何添加事件

这里确实费了点劲才找到插入事件的地方,在类视图中选择Ctrl类,邮件后选择“添加事件”,添加事件时可选择参数信息。通过向导,可以看到在CPP文件中:

// 事件映射

BEGIN_EVENT_MAP(CMyActiveXDemoCtrl, COleControl)
	EVENT_CUSTOM_ID("DemoEvent1", eventidDemoEvent1, DemoEvent1, VTS_BSTR)
END_EVENT_MAP()


在头文件中

        void DemoEvent1(LPCTSTR _info)
	{
		FireEvent(eventidDemoEvent1, EVENT_PARAM(VTS_BSTR), _info);
	}
  • C#宿主程序中
        private void btn_test_Click(object sender, EventArgs e)
        {
            this.axMyActiveXDemo1.PropDemoStr = "a道凯科技";
            long res = this.axMyActiveXDemo1.DemoGetStrLen("a道凯科技");
        }

        //一下为对事件的响应函数
        private void axMyActiveXDemo1_DemoEvent1(object sender, AxMyActiveXDemoLib._DMyActiveXDemoEvents_DemoEvent1Event e)
        {
            int a = 0;
        }
由于在DemoGetStrLen的接口中,控件已触发了事件,因此在C#的事件响应函数中打上断点,确实可以看到被”触发”了。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值