ActiveX的MFC设计之旅.docxVIP

  • 1
  • 0
  • 约 10页
  • 2018-06-11 发布于贵州
  • 举报
ActiveX的MFC设计之旅

ActiveX控件的MFC设计之旅 在csdn中碰到了好几个问使用MFC设计ActiveX控件的朋友,联想到自己以前也干过这事,突然想写些文章,介绍介绍我所知道的一些设计技巧。 无奈,千头万绪,不知如何着手,最后,决定干脆设计一控件,将在控件中碰到的一些问题,一些方法写出来。想一想,就设计一网格控件吧,取名为LiteGrid。 (忘了说了,咱这文稍微还是有点深度的,如果各位想看怎么添加属性,事件的,抱歉了,本文不提供) 第一个要加的酷酷的功能是加上层次结构,看看VB中的好多控件,都有这种结构, 以ListView控件为例,就有 ListView1.ListItems(0).Checked=True 这种以对象作为属性的结构是怎么实现的, 网上有资料的,杨老师的 关于 IDispatch 接口的 LPDispatch 属性的实现 一文中就有介绍 在msdn中的教程AutoClick中也有介绍, 总之呢就是用IDispatch作为控件的属性就行了。 好了,闲话少说,那咱就开始了: 1.添加一个派生自CCmdTarget的类CCell,用该类表示网格控件的一格,注意 Automation用Creatable by Type ID选项 2.在ClassWizard中为CCell类添加上属性Text 3.实现Text属性,如下 void CCell::OnTextChanged() { // TODO: Add notification handler code AfxMessageBox(m_text, MB_OK | MB_ICONINFORMATION, 0); } 4.为CLiteGrid添加上LPDISPATCH类型的只读带参数属性Cell(long nCol, long nRow),这个我想一般的都会加吧,就简单说一下了 在ClassWizard的Automation中的AddProperty对话框中, 在 Implementation一项中,选择Get/Set methods, 删除掉Set function一项中的所有内容,以设置为只读属性 在Parameter list一项中,添加上两个参数long nCol和long nRow 这里要声明两点,一个是在VB中Integer类型对应的应是 short,Long类型对应的则是long,另一个是这里的带参数属性和前面的ListView的ListItems还是有些不同的,具体的咱以后再谈了 5.接下来咱就实现这个Cell属性了 LPDISPATCH CLiteGridCtrl::GetCell(short nCol, short nRow) { // TODO: Add your property handler here CCell* pcell = new CCell; return pcell-GetIDispatch(FALSE); } 说明一下: CCmdTarget的GetIDispatch函数原型为 LPDISPATCH GetIDispatch( BOOL bAddRef ); 这里我们将bAddRef设为FALSE是因为,在构造CCell时,引用值已经设为1了,而GetCell之后,我们就不需要 pcell对象了。如果pcell是成员变量,而且在控件的其它地方还需要它,那么得设为TRUE。 另外,请注意#include Cell.h,^_^ 好了,OK了,编译一下,我们就在VB中试试吧 新建一VB工程,添加LiteGrid控件到窗体上 在 Form_Load中加上如下语句 LiteGrid1.Cell(0,0).Text = 元旦快乐 运行一下看看效果如何 但是,和VB中的其它控件比较一下,是不是有所不同,.Text没法提示出来,虽然能用,可是没提示,总觉得差了点什么吧,怎么能这个提示弄出来呢,呵呵,且听下回分解 就是要能在VB编辑时列出LiteGrid的Cell对象的属性。 首先,为什么列不出来,那是因为我们的Cell属性的返回类型是 LPDISPATCH,也就是IDispatch*,IDispatch是一通用接口,好象是没有Text之类的属性的了 所以,很简单的,把 LPDISPATCH改成ICell*就可以了 1.打开LiteGrid.odl文件,将Cell属性的返回类型LPDISPATCH改成ICell* 是不是好了,编译看看,好象不行啊,不认识ICell*,呵呵,我想大多数的朋友都知道原因的,把ICell接口的定义提前就可以了。 2.把从注释语句 // Primary dispatch interface for CCell 开始的ICell接口相关的定义拉到 // Primary dispatch interfa

文档评论(0)

1亿VIP精品文档

相关文档