如何在Windows Mobile 5和6应用程序中检测屏幕方向更改事件,并使用嵌入式C ++检测?

StackOverflow https://stackoverflow.com/questions/3472748

我正绕过头,希望这里的任何人都能提供帮助。

我正在使用一个在Windows Mobile OS,版本5和/或6上运行的应用程序,该应用程序用嵌入式C ++编写。问题在于,应用程序中的控件在用户做一些切换显示方向时(例如打开设备的键盘)时将全部弄乱并四处移动。

在这一点上,我一直在看这个,变得有些绝望。因此,我想我现在希望有一个快速而肮脏的解决方案,即使存在。如果可能的话,我想尝试有效地将设备锁定在肖像显示中,或者找到一种检测方向开关的方法,以便我可以一贯将显示器迫使显示器回到肖像模式。

我一直在阅读一篇文章(请参阅帖子底部的部分列表),但根本无法解决此问题。

是否有一些我可以抓住的事件,然后应用代码(尚未解决)重置方向?

这是我一直试图理解的一些文章的列表:

有帮助吗?

解决方案

此功能应检测屏幕是否处于狭窄模式:

BOOL IsPortrait()
{
  DEVMODE devmode;
  ZeroMemory(&devmode, sizeof(DEVMODE));
  devmode.dmSize = sizeof(DEVMODE);
  devmode.dmDisplayOrientation = DMDO_0;
  devmode.dmFields = DM_DISPLAYORIENTATION;
  ChangeDisplaySettingsEx(NULL, &devmode, NULL, CDS_TEST, NULL);

  return devmode.dmDisplayOrientation == DMDO_0;
}

此功能应旋转到肖像模式:

void RotatePortrait(void)
{
  DEVMODE devmode;
  ZeroMemory(&devmode, sizeof(DEVMODE));
  devmode.dmSize = sizeof(DEVMODE);
  devmode.dmFields = DM_DISPLAYORIENTATION;
  devmode.dmDisplayOrientation = DMDO_0;

  ChangeDisplaySettingsEx(NULL, &devmode, NULL, 0, NULL);
}

您将需要一个顶级窗口(没有父母)来处理 WM_SETTINGCHANGE 消息以检测旋转。

//...in WndProc...
case WM_SETTINGCHANGE:
  if (!IsPortrait())
  {
    RotatePortrait();
  }
  break;
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top