如何正确使用控件的方法——使用“继承”思想的重要性

 控件的设计思想就是将一些应用程序中常用的功能封装起来从应用中分离出来成为一个独立通用的模块,这个跟中间件的思想有些类似,其实在嵌入式系统中很多控件就是作为一个中间件来定义的,比如串口中间件,USB中间件等,而在PC平台上往往只是一个控件的概念,因为PC平台对于中间件的定义可能要更大一些,控件可以理解为轻量级的中间件。

 

既然设计目标是通用,就应该尽量做到与具体应用无关。这个跟框架软件的设计思想是一样的,要做到应用的扩展和修改包括移植都和控件本身无关,也就是说所有这种类型的代码都应该是跨应用的。

 

继承是面对对象设计方法一个重要的思想之一,但想充分的理解以及用好这个思想并不是那么容易做到的,我们在设计一个应用程序的时候如果发现几个类有很多共同的地方(比如相同的操作和数据结构)很自然的我们会想到“继承”——使用一个基类来封装这些共性。更具体的一个例子就是框架性软件MFC了,MFC设计目的是针对所有Windows应用程序,所有的MFC应用程序都是不同程度的从MFC的各种基类中继承而来,事实上MFC中大部分的类都是不可以直接使用的,所以使用诸如此类的代码我们第一个想到的就应该是继承。换句话说通用的东西就应该是被继承的东西,继承就是扩展,通用的部分加上应用特有的部分就构成了具体的应用。

 

回到控件的使用上来,可以想象控件本身只实现了控件最本质的特性,比如一个Edit控件它应该会响应一些特定的用户输入,比如键入字符,一个Button控件应该响应用户按下的输入,并将这些输入转换成事件消息(或者说是通知消息)发送给父窗口,其实这些控件本身都是一个Windows窗口,他们将相应的普通窗口消息翻译成特定的事件,比如一个BN_CLICKED消息可能本身就是针对该Button所在窗口的一个WM_LBUTTONDOWN和一个WM_LBUTTONUP组合消息产生的一个结果。而这个特性是非常基本的一个按键的功能,应用程序不用自己去判断该按钮是否是已经被按下——更重要的一点是,应用程序也仅仅是不需要做这个判断而已,控件不会帮你做任何除此之外其他跟应用相关的事情。

 

举例而言,比如有的时候会希望父窗口和子窗口同时对某一个窗口消息进行响应,此时该如何实现?当你在父窗口去实现窗口消息映射时会发现消息根本得不到相应,你可能会在PreTranslateMsg函数中去截取相应的消息发现也是徒劳的,原因是因为子窗口(可能是个控件)已经对该消息进行了捕获并做了处理(默认的),所以父窗口将得不到处理这个消息的机会。这里正确的做法应该是继承一个子窗口的类,然后为其添加相应的消息处理重载函数,并在该函数中添加所有需要处理的内容(包括父窗口“需要”处理的内容),而不应该期待子窗口和父窗口分别独立的对同一消息做各自的处理。

 

总之层次化的思想(也就是继承)才是面对对象方法的本质。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值