引子
早上写数字电视的时候,让我想起来在黎明网络的经历。我在那里工作了一个月,写了一个机顶盒主控程序。6年过去,也算个文物了,但我觉得其实还是有些用处的。
我进黎明网络那会,他们正在热火朝天地搞所谓的“黎明6A理想”,电视机顶盒,也是这6A理想的一份子。我进去的时候,这个机顶盒组包括我,一共两人。一个是我,一个是我的老板。
老板
我的老板负责搞硬件,定制小PC机,遥控键盘和鼠标之类的,同时也管管整个项目的规划。他姓龚,是个博士,年纪并不大。在我所接触过的博士里面,他大概是唯一一个让我非常佩服的了。上个月,有个黎明网络出来的人来面试,聊起来,我才知道他已经成了黎明的CTO。这证明了我的眼光非虚啊。我得承认,他的水平,比我确实牛B很多。
软件
我负责写软件,也就是那个主控程序。我们的机顶盒是个单板机,但仍然是个PC,只是小很多,上面装的操作系统是win98。所以,我这个所谓的主控程序,实际上就是一个可执行文件,名为explorer.exe,用来将98系统中自带的桌面explorer.exe替换掉。这样的话,机顶盒一打开,启动完成之后,就进入了我写的主控程序。当然,我在主控程序里面留了个后门,通过某个热键就可直接激活原装的那个桌面,这样方便进行管理和调试。
主控程序非常傻瓜。进去是一个无标题栏,无边框的窗口。窗口中间从上到下一溜菜单。菜单上的字都大大的,因为屏幕在电视上,操作都是在几米远的地方,字不大是看不清楚的。对于这个问题,我后来曾经非常认真细致地考虑过。我的结论是:要把数字电视屏幕,当手机屏幕一样去开发。
菜单
用遥控鼠标或者键盘,可以在一溜菜单上移动并进行选定。选定之后,就是执行相应的动作,所谓相应的动作,实际就是打开相应的进程。如果进程已经存在实例在运行,就把它调到前台,否则就启动一个。一般的,应用就是VCD播放,DVD播放,CD播放,上网浏览,混音器,游戏之类的。但这些,都是可以配置的。所有的屏幕元素,都是可以配置的。
任何时候,屏幕上只有一个窗口运行,窗口太多会把人搞晕。任何时候,都可以通过热键回到主菜单。除了主菜单,配合电视用户的使用习惯,我还搞了一个OSD菜单。可以在任何时候用热键激活,这个菜单就比较小,跟我们在电视机上调节音量看到的差不多。OSD菜单得是透明的,这一点不能含糊。反正我是没看过电视机上有不透明的OSD菜单。
以上这些,都是电视机处于视频模式的时候,用户看到的。因为机顶盒是接在一个AV的输入上,所以用户可以随时在电视和机顶盒之间进行切换。当时的机顶盒比较笨拙,必须通过另外的线路上网。因为有线电视复用信道上网,当时还没有开发出来。
难题
别小看这么一个程序,做好它不容易。越傻瓜的程序越难做。抛开加载遥控器驱动,读入遥控码这些技术问题不谈,我还碰到了两个技术难题。
一个是透明的OSD菜单,光是搞这个就费了我老鼻子劲。现在不知道发展得咋样了,反正当时微软的API在这方面做得不太成熟,直接用不大灵光。最后好象是拼凑了好几个API调用才勉强搞定。这个问题说起来,其实也很简单,就是前景和背景叠加时,位图运算的算法选择的问题。我不想自己去读位图,然后搞算法,老想着去借用系统的东西,所以就有点狼狈。
还有一个,就是前面说的,把一个进程主窗口调到最前面。咋一看,这不是一个问题。不就是把窗口的Z Order设置在最上面吗。说起来是这样,调起来就看运气了。有的时候好使,到前面来了,有时候就是不好使,没有任何反应。看我折腾了半天,还是解决不了,老板决定给我介绍一个黎明的大牛。说是此人对API调用非常精通。
大牛
大牛果然是大牛,我前去拜访他的时候,基本没拿正眼瞧我。我把我的问题讲完,他翻了翻白眼,仿佛听到了一个最愚蠢的问题。用那个设置Z Order的API啊,或者一个好象是BringToFront的东东,他断然地说。
都试过了,两个都试过了。有时候不灵啊,不知道咋回事。我小心翼翼地说。
不可能!他这样结束了我们的谈话。
专家是很不可信的,本来我就不想去问,不过碍于老板的面子才去了。他这么一说,我自然扭头就走。
土法
其实,我早就想好了,并已经试验过了一个可行的土法。拜访大牛,只是希望看看究竟有没有更优雅的方法。现在看来,连大牛都不灵了。那就土法吧。
土法很简单,是基于这样的原理:当你用鼠标点击位于后面的一个窗口时,这个窗口就成为当前窗口,并被推到屏幕最前面。除非当前存在那种AlwaysOnTop属性的窗口。
土法步骤:
1。任何进程窗口都取消AlwaysOnTop属性
2。最大化欲激活的窗口
3。向该窗口发送一个鼠标点击事件。该点击发生在其窗口标题栏的正中位置
土法虽然土,但是屡试不爽。
离开
进黎明整整一个月时间,我刚好做完这个程序,还去南头小学装了很多机。我很自信地跟老板说,这个程序没有BUG。
离开黎明,一方面是不适应它的文化。每天必须穿衬衫上班,早餐不能在办公室吃。办公室气氛很沉闷,人们几乎不怎么相互交谈。有个家伙一到午休时间就放齐秦的最新大碟,那是我在黎明唯一的文化生活。
当然,另一方面,是那时候的网络泡沫给了我一次与人合伙创业的机会。接下来的一年,是亲历泡沫并看见它们破灭的一年,动荡不安而又异常精彩的一年。很过瘾的一年。
但是
黎明短短的一个月时间,留给我关于产品设计的思考却非常非常多。
到了今天,数字电视即将成为最牛B的网络终端的时候,这些经历和思考也许会重新派上用场。
