首先描述一下功能:完全模拟电视,3个按键,1个功能选择,剩下的两个进行值的加或减,指定时间无操作则自动消失。最初的想法是在Shell上绘图,这样最直接,但是最大的问题是如何擦除,可行的方法是进行屏幕刷新,但是我试了好几次都不行,于是换成了现在的方案:把所有的显示都用窗体模拟,开发流程如下:
1、从EVC中抓取SDK程序的代码,放到驱动中。
之所以这么做,是因为驱动中无法使用MFC,PC平台的SDK代码无法兼容CE,这样做是最科学的。
2、修改窗口样式
主要有3:无边框、任务栏无显示、背景色设置。其中比较麻烦的是任务栏无显示的设置, 需要在WM_CREATE事件中操作SetWindowLong,不然没有效果。
3、将窗口创建线程化。
因为不多线程的话就会导致驱动的阻塞,就无法响应别的事件了。因此这里是最重要的,由于是C不是C++,不能OO,比较麻烦,我直接分了9个线程,一个窗口对应一个,这样方便控制,然后设置一个全局的HWND[9],用来进行线程的控制。
4、加入Timer操作
TV的菜单都是自动消失的,所以这里设置一个全局的倒计时变量,然后添加WM_TIMER事件。
5、流程实现
这里是最麻烦的,多个线程,还有若干全局变量,还要考虑中断问题。
调试最麻烦了,编译1次得20分钟。Anyway,I do it。现在,已经完全模拟成功,只差添加声音和亮度控制的代码了!