服务热线:
您当前的位置:首页 > 世纪星月刊 > 第6期 (2011年6月)

【技术前沿】小议控件

2011/9/21 16:23:32


 

研发部  杨盛海

 

  当图形界面的操作系统问世后,如何让应用程序更加美观成为程序员关注的焦点,在Windows操作系统下,利用系统的图形设备接口(GDI)以及强大的应用程序接口(API)能够画出足够丰富的程序界面。


  然而,对美观画面的追求也成为了程序员不小的负担,他们往往花费大量精力编写大量的界面代码来使程序看起来界面友好。如果要更进上一步,达到漂亮的阶段,就需要花费更多的精力。


  笔者曾面试过一家嵌入式开发的公司,当面试官,也就是部门经理问及以往的工作中,界面的代码量占总体代码量的比重时,我回答是四分之一。他用一种怀疑的眼神看我,好像觉得不可思议,后来他说,这么少啊?也许当时在嵌入式领域,界面的开发仍然是比较繁杂的工作之一,当然现在已经有所改观。


  后来微软弄出一套可视化的开发工具,令人印象深刻的是,界面的编写不再像之前那样,在设备环境(DC)中不停地画啊画,只需要在工具箱中选择一些事先开发好的图形单元,往显示窗口上一拖就齐活。界面编程在一夜之间变成最简单的事,后来有人形容可视化开发就像面向对象开发一样是编程领域的重大突破,虽说有些夸张,但足以说明这种方式对程序开发领域的影响。

  
  下面就重点介绍一下目前在Windows开发下普遍要用到,非常方便的可以在界面上灵活拖动的图形单元-控件。


  最开始的控件就是封装在动态库中的一些界面代码,应用接口简单,形式单一,无非就那么几种,按钮、文本框、滚动条……样子灰秃秃,这也是和早期的Windows系统样子比较一致。虽说简单,但也开创了可视化开发的先河。到后来,控件的形式逐步多起来,有更加复杂的形式,如表格控件、树控件等,它们的应用接口也日渐丰富,包含属性、方法和事件等。


  这些变化都源于它们基于一个强大的构架之上,这就是COM。


  COM和可视化开发没有直接的关系,COM是一种组件模型,提供了组件之间互相访问所必需具备的框架功能。后来微软的牛人在COM架构之上开发出可视的接口,这就是后来的COM控件,也就是我们后来通常所说的控件。控件的方法、属性和事件等应用接口,其本质还是COM接口,一个强大的架构带给我们的是无与伦比的便利。


  可视化开发逐渐随着Windows的流行而普及,用户越来越多,随之带来各种各样的需求也越来越多,控件的形式虽说不可谓不丰富,控件的接口虽说不可谓不强大,但也无法应对广大人民群众日益增长的程序功能需求。于是,自定义形式的控件开发就出现,人们可以自己开发控件。微软说,既然客户你比较牛,我提供的控件不能满足你,那么想要什么样的功能,你自己来写,我没有那么多精力来写那么多控件,我只提供我认为比较经典的。这样用户就皆大欢喜了。


  可以说有很大一部分公司比较精,他们看到这块儿的市场,利用自定义控件开发出更多更漂亮的控件来卖给最终用户,这也是微软的战略之一,这些商家靠着微软这棵大树吃饭,微软也要靠这些商家占领市场,实在一举两得。


  随着市场的扩展,出现一部分这样的用户,也许笔者也属于这部分。他们既不满足于标准的控件提供的功能,又没有精力来开发自定义的控件,然后也不想出钱来买第三方开发的控件,那还有一条路可走,就是在标准控件提供的扩展接口自己开发,这个工作要比完全自己定义控件要少得多,比如对于标准的下拉列表框Combo Box,就有绘制每项的接口——Draw Item事件,一些大部分的简单扩展都可以通过这种方式来实现,可实现在短时间内开发功能相对丰富的控件。


  再后来,微软推出.net平台,使得控件的开发和使用更加方便,本身.net平台就是一个功能超级强大的类库,其内核仍然是COM框架,这个类库包含比以往要数量要庞大的多的类,这些类中有些是可视,有些是不可视,可视的类也比以往强大得多,复杂得多,比如,Split Panel类和DataGridView类。前者提供一个带分隔条的面板,要开发多种界面形式的话,使用起来很方便,后者提供数据表格的综合显示平台,其功能多到足可以形成一个帮助文档。这些控件同时提供比以往更丰富的接口,使用起来也非常便利。


  有人问,这些控件既然功能那么强大,是否就能满足绝大多数用户的需求呢,我认为不是,至少没有满足我的需求。前些日子我用了一下Split Panel控件,发现分隔条上有一个焦点框总是挥之不去,想尽办法也没有解决,最后无奈放弃,退而求其次选择了分隔条+普通Panel形式的组合。后又有个项目需要像Excel一样能够合并单元格,我想到DataGridView,其标准功能里没有合并这一项,只好在Cell Painting事件自绘实现,中间颇费周折。


  所以,既使是强大到.net这个层级的软件,也不可能满足所用户的需求,甚至连“大部分”也达不到,所幸的是,.net也提供自定义控件这个工具,并提供一套新的开发框架,比以往开发COM自定义控件那一套简单不少,而且在绘制界面这块基于的是比GDI更快的GDI+。控件开发这块儿如果用.net来做,应当说是难度比之前小了很多。


  目前网络上有很多开源或者免费的控件可以供我们下载使用,它们界面精美,功能强大,使用便利,是不可多得的程序精品,为开发项目提供了很大的方便。它们的背后是一群淡泊名利的高手,他们不求回报,默默无私地奉献,在这里,我对他们表示由衷地敬佩。

 


 


企业邮箱  |  法律公告  |  隐私保护  |  联系我们  |