获取 WinCE 移动设备屏幕旋转方向

本文详细介绍了如何通过系统接口和注册表两种方式获取WinCE移动设备的屏幕旋转方向,并提供了代码实现,包括方向标志和镜像设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

【生活经历分享】华师国培 华师伴学 合同都是坑 消费者付款后无法退款
和华师国培签合同需小心,合同中都是保护华师的条款,没有保护消费者的条款。
收到钱,就算你因对培训质量不满意,也不能退款。因合同消费者维权肯定十分艰难。
华师伴学的授课方式是看录制的视频,不是真人现场教学。是否是您和孩子想要的学习方式?
各位打算报名的,交费要谨慎!

#ifndef DMDO_ZERO
#define DMDO_ZERO     0
#endif
#ifndef DMDO_90
#define DMDO_90       1
#endif
#ifndef DMDO_180
#define DMDO_180      2
#endif
#ifndef DMDO_270
#define DMDO_270      4
#endif

//direction flags
#define DIR_SWAPXY          0x001
#define DIR_MIRRORLEFTRIGHT 0x002
#define DIR_MIRRORUPDOWN    0x004

static int giOrientation = -1;

#define TARGET_WINCE
int GetOrientation()
{
#if defined(TARGET_WINCE)
  if(giOrientation < 0)
  {
    HKEY Key;
    // context *p = NULL;
    char Buffer[256];
    DEVMODE *Mode = (DEVMODE *)Buffer;    // 一个比较复杂的结构体, 定义请参看 MSDN

    Mode->dmSize = 192;
    Mode->dmFields = 0x01000000L;


	static LONG (WINAPI *FuncChangeDisplaySettingsEx)(LPCTSTR,LPDEVMODE,HWND,DWORD,LPVOID) = NULL;

	HINSTANCE CoreDLL = LoadLibrary(_T("coredll.dll"));
	if (CoreDLL)
	{
	  *(FARPROC *)&FuncChangeDisplaySettingsEx = GetProcAddress(CoreDLL,_T("ChangeDisplaySettingsEx"));
	}

    if(FuncChangeDisplaySettingsEx &&
      0 == FuncChangeDisplaySettingsEx(NULL, Mode, NULL, CDS_TEST, NULL))
    {
      Mode->dmFields = 0x00800000L;
      FuncChangeDisplaySettingsEx(NULL, Mode, NULL, CDS_TEST, NULL);

      switch((&Mode->dmDisplayFrequency)[1]) //(Mode->dmDisplayOrientation)
      {
      case DMDO_ZERO:
        giOrientation = 0;
        break;
      case DMDO_90:
        giOrientation = DIR_SWAPXY | DIR_MIRRORUPDOWN;
        break;
      case DMDO_270:
        giOrientation = DIR_SWAPXY | DIR_MIRRORLEFTRIGHT;
        break;
      case DMDO_180:
        giOrientation = DIR_MIRRORUPDOWN | DIR_MIRRORLEFTRIGHT;
        break;
      default:
        // giOrientation = 0;
        break;
      }
    }

    if(giOrientation < 0 && ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("System\\GDI\\ROTATION"), 0, KEY_READ, &Key))
    {
      DWORD dwValue;
      DWORD dwRegSize = sizeof(dwValue);
      DWORD dwRegType;

      if(ERROR_SUCCESS == RegQueryValueEx(Key, _T("Angle"), 0, &dwRegType, (LPBYTE) &dwValue, &dwRegSize))
      {
        switch(dwValue)
        {
        case 0:
          giOrientation = 0;
          break;
        case 90:
          giOrientation = DIR_SWAPXY | DIR_MIRRORUPDOWN;
          break;
        case 270:
          giOrientation = DIR_SWAPXY | DIR_MIRRORLEFTRIGHT;
          break;
        case 180:
          giOrientation = DIR_MIRRORUPDOWN | DIR_MIRRORLEFTRIGHT;
          break;
        default:
          // giOrientation = 0;
          break;
        }
      }

      RegCloseKey(Key);
    }

    if(giOrientation < 0)
      giOrientation = 0;
  }
#else
  giOrientation = 0;
#endif

  RETAILMSG(1,(L"[%s]Orientation: %d\r\n",CString(__FUNCTION__),giOrientation));		// [GetOrientation]Orientation: 0
  return giOrientation;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

91program

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值