zoukankan      html  css  js  c++  java
  • 获取 WinCE 移动设备屏幕旋转方向

    获取 WinCE 移动设备屏幕旋转方向,分别从系统提供的接口和注册表获取。如果都获取不到,则采用默认值。

      1 #ifndef DMDO_ZERO  
      2 #define DMDO_ZERO     0  
      3 #endif  
      4 #ifndef DMDO_90  
      5 #define DMDO_90       1  
      6 #endif  
      7 #ifndef DMDO_180  
      8 #define DMDO_180      2  
      9 #endif  
     10 #ifndef DMDO_270  
     11 #define DMDO_270      4  
     12 #endif  
     13   
     14 //direction flags  
     15 #define DIR_SWAPXY          0x001  
     16 #define DIR_MIRRORLEFTRIGHT 0x002  
     17 #define DIR_MIRRORUPDOWN    0x004  
     18   
     19 static int giOrientation = -1;  
     20   
     21 #define TARGET_WINCE  
     22 int GetOrientation()  
     23 {  
     24 #if defined(TARGET_WINCE)  
     25   if(giOrientation < 0)  
     26   {  
     27     HKEY Key;  
     28     // context *p = NULL;  
     29     char Buffer[256];  
     30     DEVMODE *Mode = (DEVMODE *)Buffer;    // 一个比较复杂的结构体, 定义请参看 MSDN  
     31   
     32     Mode->dmSize = 192;  
     33     Mode->dmFields = 0x01000000L;  
     34   
     35   
     36     static LONG (WINAPI *FuncChangeDisplaySettingsEx)(LPCTSTR,LPDEVMODE,HWND,DWORD,LPVOID) = NULL;  
     37   
     38     HINSTANCE CoreDLL = LoadLibrary(_T("coredll.dll"));  
     39     if (CoreDLL)  
     40     {  
     41       *(FARPROC *)&FuncChangeDisplaySettingsEx = GetProcAddress(CoreDLL,_T("ChangeDisplaySettingsEx"));  
     42     }  
     43   
     44     if(FuncChangeDisplaySettingsEx &&  
     45       0 == FuncChangeDisplaySettingsEx(NULL, Mode, NULL, CDS_TEST, NULL))  
     46     {  
     47       Mode->dmFields = 0x00800000L;  
     48       FuncChangeDisplaySettingsEx(NULL, Mode, NULL, CDS_TEST, NULL);  
     49   
     50       switch((&Mode->dmDisplayFrequency)[1]) //(Mode->dmDisplayOrientation)  
     51       {  
     52       case DMDO_ZERO:  
     53         giOrientation = 0;  
     54         break;  
     55       case DMDO_90:  
     56         giOrientation = DIR_SWAPXY | DIR_MIRRORUPDOWN;  
     57         break;  
     58       case DMDO_270:  
     59         giOrientation = DIR_SWAPXY | DIR_MIRRORLEFTRIGHT;  
     60         break;  
     61       case DMDO_180:  
     62         giOrientation = DIR_MIRRORUPDOWN | DIR_MIRRORLEFTRIGHT;  
     63         break;  
     64       default:  
     65         // giOrientation = 0;  
     66         break;  
     67       }  
     68     }  
     69   
     70     if(giOrientation < 0 && ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("System\GDI\ROTATION"), 0, KEY_READ, &Key))  
     71     {  
     72       DWORD dwValue;  
     73       DWORD dwRegSize = sizeof(dwValue);  
     74       DWORD dwRegType;  
     75   
     76       if(ERROR_SUCCESS == RegQueryValueEx(Key, _T("Angle"), 0, &dwRegType, (LPBYTE) &dwValue, &dwRegSize))  
     77       {  
     78         switch(dwValue)  
     79         {  
     80         case 0:  
     81           giOrientation = 0;  
     82           break;  
     83         case 90:  
     84           giOrientation = DIR_SWAPXY | DIR_MIRRORUPDOWN;  
     85           break;  
     86         case 270:  
     87           giOrientation = DIR_SWAPXY | DIR_MIRRORLEFTRIGHT;  
     88           break;  
     89         case 180:  
     90           giOrientation = DIR_MIRRORUPDOWN | DIR_MIRRORLEFTRIGHT;  
     91           break;  
     92         default:  
     93           // giOrientation = 0;  
     94           break;  
     95         }  
     96       }  
     97   
     98       RegCloseKey(Key);  
     99     }  
    100   
    101     if(giOrientation < 0)  
    102       giOrientation = 0;  
    103   }  
    104 #else  
    105   giOrientation = 0;  
    106 #endif  
    107   
    108   RETAILMSG(1,(L"[%s]Orientation: %d
    ",CString(__FUNCTION__),giOrientation));        // [GetOrientation]Orientation: 0  
    109   return giOrientation;  
    110 }  
  • 相关阅读:
    Adobe 软件防止联网激活更改Hosts文件
    Spark 共享变量之——Accumulator(累加器)
    AccumulatorV2不生效的问题排查
    RDD的Cache、Persist、Checkpoint的区别和StorageLevel存储级别划分
    2、Spark Core职责之初始化(1)——SparkContext
    1、Spark Core所处位置和主要职责
    Spark作业提交至Yarn上执行的 一个异常
    Swagger2在DBA Service中生成RESTful API的实践
    docker image换包步骤
    GitLab私服在Ubuntu上搭建总结
  • 原文地址:https://www.cnblogs.com/91program/p/5205097.html
Copyright © 2011-2022 走看看