http://blog.csdn.net/alien75/article/details/5291600
因项目下一步应用的需求,需要用directdraw来实现相应功能,因此先行做初步尝试,建立一个感性的认识。
众所周知wince5支持directdraw,只是和PC下的还是有所不同的,在学习directdraw的时候就以public下的mosquito为例子进行学习,要让这个程序在wince5下跑起来,还是要做一点改动的。
实现前提:
(1)要加入directdraw组件
(2)定制系统并生成SDK,并用此SDK编译应用程序
(3)链接gxguid.lib,网上说的还需要uuid.lib和ddraw.lib,实际上在此例子中是不需要的,原因在下面描述。
修改
(1)在运行到DirectDrawCreate时会报0xc0000005错误,原因可能与ddraw.lib有关。用从ddraw.dll动态获取DirectDrawCreate指针来调用的方法,因此ddraw.lib不再需要链接。而在此例中,没有其它的uuid使用,因此uuid.lib也不需要进行链接。
(2)DirectDrawCreate的第二个参数在使用上面的办法获取后,要由LPDIRECTDRAW改为LPDIRECTDRAW4
(3)执行CreateSurface创建overlay surface失败,原因有两个,如下
主要原因:显示驱动ddraw功能有错,改用另一个BSP带的显示驱动问题解决,需要对两个驱动进行比较找出问题所在。
次要原因:dwBackBufferCount由2改为1,为什么只能有一个buffer还需要深入了解。
(4)经过上述修改图片可以动态显示,但底色没有透明,去掉ddpfOverlayFormats中关于YUV的两个格式,只保留RGB565和RGBA555两种。
(5)前景色为绿色,而不是原有的黄色,估计与驱动中颜色索引有关,待深入了解。
从此例子来看,directdraw开发是先要创建一个directdraw对象,然后创建prime surface和overlay surface,通过surface的操作显示图片来达到动画效果。
附:MOSQUITO的基本流程
1、创建窗口
2、创建directdraw实例对象
3、设置屏幕为Normal模式
4、创建主表面
5、判断驱动是不否有overlay功能
6、创建overlay表面
7、加载位图资源
8、配置overlay表面
9、设置计时器,循环变换位置并显示
问题:
用老的驱动,使用TCPMP的directdraw功能播放视频OK,如果用新的驱动则无显示,原因是什么?