1、S3C6410开发板上实现屏幕旋转(实现)
i)修改 E:\WINCE600\PLATFORM\SMDK6410\SRC\DRIVERS\DISPLAY\DISPLAY_DRV\display_main.cpp中让
line172: m_iRotate = GetRotateModeFromReg();//从注册表读取Angle值
ii)修改注册表 platform.reg
line56: [HKEY_LOCAL_MACHINE\System\GDI\Rotation]
"Angle"=dword:0 ;5A,B4,10E
iii)保存重新编译即可
2、驱动层上实现:winCE 4.2以上(未测)
一.修改
SMDK2440\DRIVERS\DISPLAY\S3C2440LCD 目录下的sources文件合适位置增加:
CLEARTYPE=0
ROTATE=1 //这句是我加的
二.s3c2440disp.h文件头上加一句
#define ROTATE
三.s3c2440disp.cpp中
S3C2440DISP::S3C2440DISP (void)
{
#ifdef ROTATE
//m_iRotate = GetRotateModeFromReg(); 原来的是通过GetRotateModeFromReg读取
//[HKEY_LOCAL_MACHINE\System\GDI\Rotation] 下的"Angle"值决定m_iRotate
m_iRotate = DMDO_90;
SetRotateParms();
#endif //ROTATE
四.检查platform.reg中,
[HKEY_LOCAL_MACHINE\System\GDI\Drivers]
"Display"="s3c2440disp.dll"
以下注册表可以有可以没有。
[HKEY_LOCAL_MACHINE\System\GDI\Rotation]
"ANGLE"=dword:5A ;0x5A for 90,这是我加的 ,加在gdi\drivers这项后面
五,要在S3C2440DISP::S3C2440DISP (void) 最后加一句
((GPESurfRotate *)m_pPrimarySurface)->SetRotation(m_nScreenWidth, m_nScreenHeight, m_iRotate);
而s2440.h、2410中关于屏幕的东西不要去改,那是初试化lcd控制器的,与这里没有关系。
2、通过修改注册表做Rotation
默认情况下,屏幕都是正常显示的,也就是说翻转角度为0度。可以通过修改注册表来做屏幕翻转,通过修改”Angle”的值来完成,具体设置如下:
[HKEY_LOCAL_MACHINE\System\GDI\Rotation]
"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)。
原文引自:http://jimmyloveforever.blog.163.com/blog/static/11977524720096183118993/