Windows mobile系统如何禁止竖屏切换到横屏

zhaoshangshang 2010-05-12 02:50:02
大家好,小弟遇到一个问题,在Windows mobile系统上如何屏蔽切换横屏的操作。因为我的程序没有做两套UI资源,现在只有支持竖屏的UI资源,一旦用户切换到横屏,界面就会出现错乱,所以我想屏蔽系统切换横屏的操作,不知道各位有没有好的办法去做屏蔽,之前查了不少资料,有人说屏蔽要改注册表,我觉得应用程序做这个操作不太好。也有人说可以在切换横屏后再切回竖屏,但我测试发现有时会失败,无法保证百分百屏蔽,比较着急,请大家多多帮忙,不胜感激!
...全文
699 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
beyondma 2010-05-18
  • 打赏
  • 举报
回复
必须得有两套布局。这是至少的。
载舟之水 2010-05-18
  • 打赏
  • 举报
回复
对 你看 那个API的 Remarks里有明确的说明是检测SETTINGCHANGE_RESET
载舟之水 2010-05-18
  • 打赏
  • 举报
回复
你去看下HTC的马尼拉插件就是强制再转回来的。
zhaoshangshang 2010-05-18
  • 打赏
  • 举报
回复
明白了,那是不是可以这么认为,在目前的WM中,如果程序没有准备两套UI资源的话,想禁止横屏,是不是也只有这种重新绘制的方法可行,所谓的注册表回调能起作用吗
载舟之水 2010-05-18
  • 打赏
  • 举报
回复
不仅仅是重新绘制,如果这样还是很快的,微软的应用一般做了两套资源,实际上是重新载入资源,这才变得很慢。
zhaoshangshang 2010-05-18
  • 打赏
  • 举报
回复
试过了,结果是可以的,就是过程中界面的闪烁比较大,毕竟有一个重新绘制的过程,是会有这样的问题,对于应用层程序来说看来是无法屏蔽横屏切换操作的。
zhaoshangshang 2010-05-15
  • 打赏
  • 举报
回复
WM_SETTINGCHANGE里响应RESET,是不是使用ChangeDisplaySettingsEx让界面切换
载舟之水 2010-05-15
  • 打赏
  • 举报
回复
WM_SETTINGCHANGE里响应RESET才是标准方法哦。那个注册表也可以,但不是标准方法。
zhaoshangshang 2010-05-14
  • 打赏
  • 举报
回复
非常感谢roc196
这个注册表项的确反映了屏幕的切换,那这个注册表监测回调函数如何注册,能不能介绍一下,可以屏蔽系统对注册表项的修改吗
88csdn 2010-05-14
  • 打赏
  • 举报
回复
注册一个注册表监测回调函数,监测HKEY_LOCAL_MACHINE\System\GDI\Rotation\Angle应该是可以的~~~
jianhenjh 2010-05-13
  • 打赏
  • 举报
回复
等结果
zhaoshangshang 2010-05-13
  • 打赏
  • 举报
回复
是的,一般来说是做两套UI。但客户其实不要求在横屏下显示,我现在就是想在我的程序运行时禁止手机横屏,难倒这做不到吗,实在不行就修改注册表试试,但具体要改哪个我不清楚,有人遇到过这方面的问题吗,有什么好办法吗
世外涛缘 2010-05-13
  • 打赏
  • 举报
回复
通用的做法还是得做两套UI。
zhaoshangshang 2010-05-13
  • 打赏
  • 举报
回复
二楼的方法我试过了,我是在WM_SIZE消息响应函数OnSize中做响应,判断如果CY的大小等于原来CX的大小,则认为做了屏幕切换操作,之后做屏幕的切换操作,在模拟器上测试还是有效果的,就是有些闪屏,但到了带键盘的真机上,就没有效果了,感觉这种办法还不是特有效,不知是否还有其他办法,请大家指点一下
载舟之水 2010-05-13
  • 打赏
  • 举报
回复
一般来说要做两套,很多手机现在都有重力传感,可以自动横竖屏,你没法屏蔽。
zhaoshangshang 2010-05-12
  • 打赏
  • 举报
回复
哪个消息可以响应横竖屏切换,是在WM_SIZE中吗,横竖屏切换的消息标示是什么,非常感谢
zhaoshangshang 2010-05-12
  • 打赏
  • 举报
回复
非常感谢,我试一下,待会反馈结果
md16888 2010-05-12
  • 打赏
  • 举报
回复
你可以试试在创建主窗口的时候,先取得当前屏幕状态,如果当前状态和你预期的不一样,先记录当前屏幕状态,然后把他改过来,要记得在程序退出时,屏幕状态还原。可以参考以下代码:
**************************************************************************

// 取得屏幕方向

static DWORD GetScreenOrientation()
{
DEVMODE deviceMode;

memset(&deviceMode, 0, sizeof(deviceMode));
deviceMode.dmSize = sizeof(deviceMode);
deviceMode.dmFields = DM_DISPLAYORIENTATION;

// Query the DM_DISPLAYORIENTATION property
if (ChangeDisplaySettingsEx(NULL, &deviceMode,
NULL, CDS_TEST, NULL) == DISP_CHANGE_SUCCESSFUL)
return deviceMode.dmDisplayOrientation;
else
return DMDO_DEFAULT;
}



// 设置屏幕方向

static void SetScreenOrientation(DWORD dwOrientation)
{
DEVMODE deviceMode;

memset(&deviceMode, 0, sizeof(deviceMode));
deviceMode.dmSize = sizeof(deviceMode);
deviceMode.dmFields = DM_DISPLAYORIENTATION;
deviceMode.dmDisplayOrientation = dwOrientation;

// Set the DM_DISPLAYORIENTATION property to the
// specified orientation
ChangeDisplaySettingsEx(NULL, &deviceMode,
NULL, CDS_RESET, NULL);
}



7,656

社区成员

发帖
与我相关
我的任务
社区描述
Windows Phone是微软发布的一款手机操作系统,它将微软旗下的Xbox LIVE游戏、Zune音乐与独特的视频体验整合至手机中。
社区管理员
  • Windows客户端开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧