wince5下directdraw初体验

wince5下directdraw初体验,第1张

 

  因项目下一步应用的需求,需要用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、设置计时器,循环变换位置并显示

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/dianzi/2713412.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-17
下一篇 2022-08-17

发表评论

登录后才能评论

评论列表(0条)

保存