wince mini2440 旋转屏幕

40 篇文章 0 订阅

一、

下面是一段屏幕旋转结果的注册表保存代码,保存成功了,但是下次开机屏幕还是默认不旋转的,怎样才能使下次开机能保存关机前设置的结果啊?请高手指点!

//注册表保存:未成功!
void RegSaveRotate(DWORD value)
{
    DWORD rvalue=0;


    // set tmp value
    switch(value)
    {
        // CE store the short type data low-high upside down
    case DMDO_0:
        rvalue=0;
        break;
    case DMDO_90:
        rvalue=0x5A;  // 5A
        break;
    case DMDO_180:
        rvalue=0xB4;  // B4
        break;
    case DMDO_270:
        rvalue=0x010E; // 010E
        break;
    default:
        rvalue=0;
        break;
    }


    // set value
    HKEY hKEY;
    LPCTSTR data_Set=_T("System\\GDI\\ROTATION"); 
    long ret0=::RegOpenKeyEx(HKEY_LOCAL_MACHINE,data_Set, 0, KEY_ALL_ACCESS, &hKEY);


    if(ret0!=ERROR_SUCCESS)
    {
        DWORD   dwDisposition;   
        ::RegCreateKeyEx(HKEY_LOCAL_MACHINE,_T("System\\GDI\\ROTATION"), 
            0,   NULL,   REG_OPTION_NON_VOLATILE,   KEY_ALL_ACCESS
            , NULL,   &hKEY,   &dwDisposition) ;
    }
    BYTE lm=0;
    long ret1=::RegSetValueEx(hKEY,_T("Angle"),0,REG_DWORD_LITTLE_ENDIAN,(LPBYTE)&rvalue,sizeof(rvalue));
    ret1=::RegSetValueEx(hKEY,_T("LandscapeMode"),0,REG_BINARY,(LPBYTE)&lm,sizeof(lm));
    long ret2=::RegCloseKey(hKEY);

}


二、

呵呵,找到资料了:
可以看出,旋转角度已经设置了。因此可以肯定是驱动中有什么地方抑制住了。在s3c6410_disp.cpp中找到#ifdef TEMP_FIX_ROTATION_BUG。搜索这个宏定义,看到在某处在这个宏定义下有m_iRotate = 0; 。这个变量被用作m_pPrimarySurface->SetRotation(m_nScreenWidth, m_nScreenHeight, m_iRotate); 而在这个宏定义下,通篇没有改变它的地方。于是在赋值为0的地方,改为

#ifdef TEMP_FIX_ROTATION_BUG
    //m_iRotate = 0;                                              //deleted
    m_iRotate =GetRotateModeFromReg();   //added
    g_bTempFirstRotation = TRUE;
#else
    m_iRotate = GetRotateModeFromReg();
#endif
    SetRotateParams();

修改后必须 clean sysgen之后重烧NK.bin,OK。

我的测试也是OK!屏幕旋转保存成功!!!

可惜还有个小问题:就是开机画面和开机进度条没有旋转!不过也凑合了!


三、立即呈现旋转

使用以下代码可以实现:
    memset(&deviceMode, 0, sizeof(deviceMode)); 
    deviceMode.dmSize = sizeof(deviceMode); 
    deviceMode.dmFields = DM_DISPLAYORIENTATION; 
    deviceMode.dmDisplayOrientation = DMDO_90; // DMDO_180,DMDO_270
    ChangeDisplaySettingsEx(NULL, &deviceMode,NULL, CDS_RESET, NULL);



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值