Chinaunix首页 | 论坛 | 博客
  • 博客访问: 594044
  • 博文数量: 1357
  • 博客积分: 3000
  • 博客等级: 中校
  • 技术积分: 14950
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-14 20:23
文章分类

全部博文(1357)

文章存档

2010年(1357)

我的朋友

分类:

2010-10-08 09:19:18

  在wince中做screen rotation,首先确认显示设备的驱动是否支持screen rotation功能。在显示设备支持的前提下,可以通过以下两种方法做screen rotation:   1.    通过修改注册表做rotation   默认情况下,屏幕都是正常显示的,也就是说翻转角度为0度。可以通过修改注册表来做屏幕翻转,通过修改”angle”的值来完成,具体设置如下:   [hkey_local_machinesystemgdirotation">   "angle"=dword:5a     ;翻转90度,罗嗦一句,5a就是90的十六进制   可以设置为0度,90度,180度和270度。也就是0,5a,b4和10e,通过设置这些值可以达到屏幕翻转的目的。你可以在build image的时候就做这件事情,只要在project.reg文件里面加入上面的设置,然后重新make image,这样新的image启动以后就会按照你的设定来显示。也可以在wince启动以后,编个读写注册表的小程序,来修改这个值,然后重新启动就可以了(系统要支持hive-based registry)。   2.通过changedisplaysettingex(..)做rotation   应该说,该函数用来改变显示设置,具体可参见msdn。我再来简单说一下:   函数如下: long changedisplaysettingsex(      lpctstr lpszdevicename,     lpdevmode lpdevmode,     hwnd hwnd,      dword dwflags,     lpvoid lparam );   lpszdevicename:没有被使用,设置为null。   lpdevmode:    指向一个devmode结构指针。   hwnd:         预留。必须设置为null。   dwflags:         0:目前screen的图形模式可以动态改变   cds_reset:即使请求的设置和当前设置一样,也去改变。   cds_test:请求的图形模式被设置,则系统进行测试。           cds_videoparameters:被设置,则lparam传入一个指向videoparameters结构的指针。   lparam:       如果dwflags设置为cds_videoparameters,则传入一个指向videoparameters结构的指针;否则设置为null。   关于devmode结构,还是挺复杂的,一般在ce里面不会都用,这里只介绍几个我用到的:   dwsize:    描述devmode结构的大小,设置为sizeof(devmode)。   dmfields:  初始化标记位。在作rotation的时候,会用到的是dm_displayqueryorientation和dm_displayorientation。前一个用来查询目前的显示驱动是否支持rotation,后一用来实现屏幕翻转。   dmdisplayorientation:设置翻转的角度。具体如下: dmdo_0the screen is rotated by 0 degrees. dmdo_90the screen is rotated by 90 degrees counterclockwise. dmdo_180the screen is rotated by 180 degrees. dmdo_270the screen is rotated by 270 degrees counterclockwise.   一般在wince下,调用该函数作rotation的时候,我们会首先判断目前的设备是否支持rotation,程序如下: memset (&devmode, 0, sizeof (devmode));     devmode.dmsize  = sizeof (devmode);     devmode.dmfields = dm_displayqueryorientation;        if (disp_change_successful == changedisplaysettingsex(null, &devmode, null, cds_test, null))     {        messagebox((l”support.”));        currentangle = devmode.dmdisplayorientation;     }     else     {        messagebox((l"not support."));     }   如果设备支持rotation,就可以进行rotation操作,下面的程序将屏幕翻转为90度,程序如下: memset(&devmode, 0, sizeof (devmode));     devmode.dmsize = sizeof (devmode);     devmode.dmfields = dm_displayorientation;     devmode.dmdisplayorientation = dmdo_90;        if (disp_change_successful != changedisplaysettingsex(null, &devmode, null, cds_reset, null))     {        messagebox((l"rotation error."));     } else {        messagebox((l”rotation ok.”));     }   上面两种方法都可以实现screen rotation,第一种通过修改注册表的方法不能立刻实现rotation,要等设备reboot以后才会生效。第二种方法不需要重新启动,函数调用成功后,屏幕就会被翻转,但是下次启动以后又会恢复默认值。 如果喜欢在wince中实现screen rotation - wince请收藏或告诉您的好朋友.
阅读(211) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~