如何在Windows Mobile 5和6应用程序中检测屏幕方向更改事件,并使用嵌入式C ++检测?
-
28-09-2019 - |
题
我正绕过头,希望这里的任何人都能提供帮助。
我正在使用一个在Windows Mobile OS,版本5和/或6上运行的应用程序,该应用程序用嵌入式C ++编写。问题在于,应用程序中的控件在用户做一些切换显示方向时(例如打开设备的键盘)时将全部弄乱并四处移动。
在这一点上,我一直在看这个,变得有些绝望。因此,我想我现在希望有一个快速而肮脏的解决方案,即使存在。如果可能的话,我想尝试有效地将设备锁定在肖像显示中,或者找到一种检测方向开关的方法,以便我可以一贯将显示器迫使显示器回到肖像模式。
我一直在阅读一篇文章(请参阅帖子底部的部分列表),但根本无法解决此问题。
是否有一些我可以抓住的事件,然后应用代码(尚未解决)重置方向?
这是我一直试图理解的一些文章的列表:
编程更改屏幕方向 http://msdn.microsoft.com/en-us/library/ms812499.aspx
更改playsettingSex函数 http://msdn.microsoft.com/en-us/library/dd183413(vs.85).aspx
更改playsettingsex http://msdn.microsoft.com/en-us/library/aa923082.aspx
入门Windows Mobile应用程序开发
http://www.eetimes.com/design/other/4006712/getting-petting-with-with-windows-mobile-application-development应用如何检测和响应屏幕旋转
http://msdn.microsoft.com/en-us/library/bb158688.aspxDevMode http://msdn.microsoft.com/en-us/library/dd183565(vs.85).aspx
解决方案
此功能应检测屏幕是否处于狭窄模式:
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;