wince添加屏幕旋转的支持
来源:互联网 发布:js uriencoding 编辑:程序博客网 时间:2024/05/18 01:15
=============================================================
标题:wince添加屏幕旋转的支持
摘要:
备注:Windows CE 5.0
日期:2010.5.15
姓名:朱铭雷
=============================================================
对于标准smdk2440修改过来的BSP,其实LCD驱动部分的代码已经初步的支持了屏幕旋转,只需做一些补充和修改即可。
(1)/smdk2440/DRIVERS/DISPLAY/S3C2440LCD目录下找到s3c2440disp.h文件,在该文件开头加入#define ROTATE,如:
#ifndef __S3C2440DISP_H__
#define __S3C2440DISP_H__
#define ROTATE //notears
(2)在s3c2440disp.h文件中S3C2440DISP类的定义最后添加如下函数定义:
#ifdef ROTATE
void SetRotateParms();
LONG DynRotate(int angle);
int GetRotateModeFromReg();
#endif //ROTATION
(3)在s3c2440disp.cpp文件中添加GetRotateModeFromReg函数的实现,如下:
// notears 读取注册表中的屏幕方向
int S3C2440DISP::GetRotateModeFromReg()
{
HKEY hKey;
if(ERROR_SUCCESS ==
RegOpenKeyEx(HKEY_LOCAL_MACHINE,TEXT("SYSTEM//GDI//ROTATION"),0,0,&hKey))
{
DWORD dwSize,dwAngle,dwType = REG_DWORD;
dwSize = sizeof(DWORD);
if(ERROR_SUCCESS ==
RegQueryValueEx(hKey,TEXT("ANGLE"),NULL,&dwType,(LPBYTE)&dwAngle,&dwSize))
{
switch(dwAngle)
{
case 0:
return DMDO_0;
case 90:
return DMDO_90;
case 180:
return DMDO_180;
case 270:
return DMDO_270;
default:
return DMDO_0;
}
}
RegCloseKey(hKey);
}
return DMDO_0;
}
(4)在s3c2440disp.cpp文件中找到S3C2440DISP函数,先做如下修改:
#ifdef ROTATE
//m_iRotate = 0;
m_iRotate = GetRotateModeFromReg(); //notears
SetRotateParms();
#endif //ROTATE
然后在memset ((void*)m_pPrimarySurface->Buffer(), 0x0, m_FrameBufferSize);代码行
下,添加如下代码:
// notears
#ifdef ROTATE ((GPESurfRotate*)m_pPrimarySurface)->SetRotation(m_nScreenWidth,m_nScreenHeight,m_iRotate);
#endif //ROTATE
(5)找到S3C2440LCD目录下的sources文件,添加ROTATE=1,如下:
TARGETNAME=S3C2440DISP
RELEASETYPE=PLATFORM
TARGETTYPE=DYNLINK
DEFFILE=S3C2440DISP.DEF
CLEARTYPE=0
ROTATE=1
打开PB工程,注意只编译当前修改了源代码的DISPLAY目录即可,全部Build的话,那就太浪费时间了。如图:
Build完成之后,再Make Run-Time Image,将新NK下载到板子里面。
接下来就要编写应用程序进行测试了,测试代码参考如下:
DEVMODE DevMode;
memset(&DevMode, 0, sizeof(DevMode));
DevMode.dmSize = sizeof (DevMode);
DevMode.dmFields = DM_DISPLAYORIENTATION;
ChangeDisplaySettingsEx(NULL, &DevMode, NULL, CDS_TEST, NULL); // 获取当前屏幕方向
HKEY hKey;
static DWORD dwData;
// 计算新的屏幕方向
switch(DevMode.dmDisplayOrientation)
{
case DMDO_0:
DevMode.dmDisplayOrientation = DMDO_90;
dwData = 90;
break;
case DMDO_90:
DevMode.dmDisplayOrientation = DMDO_180;
dwData = 180;
break;
case DMDO_180:
DevMode.dmDisplayOrientation = DMDO_270;
dwData = 270;
break;
case DMDO_270:
DevMode.dmDisplayOrientation = DMDO_0;
dwData = 0;
break;
default:
DevMode.dmDisplayOrientation = DMDO_0;
dwData = 0;
break;
}
// 设置新的屏幕方向
DevMode.dmFields = DM_DISPLAYORIENTATION;
ChangeDisplaySettingsEx(NULL, &DevMode, NULL, CDS_RESET, NULL);
// 将新的屏幕角度写入注册表
if(ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE,TEXT("SYSTEM//GDI//ROTATION"),0,0,&hKey))
{
if(ERROR_SUCCESS!=RegSetValueEx(hKey,TEXT("Angle"),0,REG_DWORD,(const BYTE*)&dwData,sizeof(DWORD)))
{
LPVOID lpMsgBuf;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,NULL,GetLastError(),0,(LPTSTR)&lpMsgBuf,0,NULL);
MessageBox(_T("Write Registry Error"));
}
}
—————————————————————————————————————————
我测试的效果如下:
因为操作了注册表,所以这种对屏幕方向的修改在重新上电之后仍是可以保存的。
- wince添加屏幕旋转的支持
- wince添加屏幕旋转的支持
- wince下的屏幕旋转
- WinCE 实现屏幕旋转的方法
- wince实现屏幕旋转的方法
- Wince屏幕旋转使用的代码段
- WINCE实现屏幕旋转
- WinCE旋转屏幕函数
- wince mini2440 旋转屏幕
- WinCE实现屏幕旋转方法
- 实现WinCE的转屏(屏幕旋转):转自互联网
- S3C2410的WINCE BSP添加串口支持
- S3C2410的WINCE BSP添加串口支持
- wince添加SD卡的支持
- S3C2410的WINCE BSP添加串口支持
- wince添加局域网支持
- 如何让定制的WinCE支持TFT屏幕
- 如何让定制的WinCE支持TFT屏幕
- 图片又被删除了,加好友和写迷你博客等的权限也没有了。无语!
- 关于C语言printf十进制 八进制的表示
- HTML label 标签
- 全国计算机等级考试(三级网络)基本概念与名词解释
- 跟编程结缘,源于96年的高考志愿
- wince添加屏幕旋转的支持
- 重置MySQL ROOT密码
- Android开发4:电话拨号器
- Myeclipse调试
- 关于dp
- ARM指令需要注意的几点问题
- sql中循环插入大量测试数据
- 水煮TCPMP(不得不转的好文)
- LoadRunner完全卸载方法