如何以编程方式设置 UWP 应用的方向
How to set the orientation of a UWP app programmatically
我正在为可以从两侧访问的物理设备开发一个 UWP 应用程序(显示器朝上)。默认方向是横向,我希望能够以编程方式翻转(旋转 180°)应用程序的方向。
我已经尝试了两种不同的东西:
1. 使用 Win32 API 更改窗口显示方向
为此,您需要使用 user32.lib 中包含的 API 函数,UWP 应用程序无法/不允许这样做。因此,我编写了一个可以从 UWP 应用程序触发的单独程序。在这里,您可以看到我如何根据此问题提供的代码实现显示方向:
#include <windows.h>
bool SetDisplayOrientation(bool flip) {
int index = 0;
DISPLAY_DEVICE dd;
dd.cb = sizeof(DISPLAY_DEVICE);
while (EnumDisplayDevices(NULL, index++, &dd, 0) && !(dd.StateFlags & DISPLAY_DEVICE_PRIMARY_DEVICE));
DEVMODE dm;
ZeroMemory(&dm, sizeof(dm));
dm.dmSize = sizeof(DEVMODE);
if (!EnumDisplaySettings(dd.DeviceName, ENUM_CURRENT_SETTINGS, &dm)) {
return false;
}
dm.dmDisplayOrientation = flip ? DMDO_180 : DMDO_DEFAULT;
dm.dmFields = (DM_DISPLAYORIENTATION);
if (ChangeDisplaySettings(&dm, CDS_TEST) != DISP_CHANGE_SUCCESSFUL) {
return false;
}
return (ChangeDisplaySettings(&dm, 0) == DISP_CHANGE_SUCCESSFUL);
}
这有效,但是当我在 Windows 10 的展台模式下运行 UWP 应用程序时(正如我们打算这样做的那样),它会在旋转后隐藏应用程序,如果我之前与 UI 交互,则会显示空白屏幕(不知道为什么会发生这种情况,对我来说看起来像一个错误)。如果我没有与 UI 交互,旋转工作得很好,但这不是解决方案......
2. 使用 DXGI 交换链旋转应用?
在谷歌上搜索解决方案时,我很快就遇到了IDXGISwapChain1::SetRotation,也找到了这个示例程序。但是,所有这些似乎不是简单UWP用户界面的正确解决方案,因为我们需要使用DirectX实现我们的UI。如果我在这里错了,请纠正我。
3.更改自动旋转首选项
我还尝试在按下按钮时执行以下命令,但它没有执行任何操作:
DisplayInformation^ displayInformation = DisplayInformation::GetForCurrentView();
displayInformation->AutoRotationPreferences = DisplayOrientations::LandscapeFlipped;
有没有办法在不更改窗口显示方向的情况下强制 UWP 应用的方向?
您使用的自动旋转首选项API 仅在设备处于平板电脑模式时设计为工作,因此在您的设备中不起作用。您可以考虑在启动时使用 Win32 应用程序中的SetDisplayConfig设置屏幕旋转,我还将为此做一些测试。
相关文章:
- 如何使用 OpenCV 解码在两个 UWP 应用之间发送的图像字节?
- 确定C++应用程序是否作为具有旧版支持的 UWP 应用运行
- UWP 应用未通过认证过程
- 如何从 c++ winrt UWP 应用中的代码将文本添加到富文本块
- 如何处理异步函数中的异常UWP应用程序getFileFrompathAsync(path);
- 将UWP应用程序的简单INT发送到另一个程序
- 我是否需要在单语言 UWP 应用中create_async?
- 如何从 UWP 应用调用"libheif.dll"函数
- 通过屏蔽 UI 中的所有其他控件,在 UWP 应用 (c++) 中的现有 MainPage.xaml 顶部显示进度条
- 如何以编程方式设置 UWP 应用的方向
- 由于WINAPI_PARTITION_DESKTOP块,无法在 UWP 应用中使用 winscard.h
- 在 UWP C++应用程序中生成 JVM 时崩溃
- 如果我在 Xbox UWP 应用程序上收到激活错误并且错误消息中没有任何有用的内容,该怎么办
- 通过UWP应用程序定位Windows 10,通过OpenNi 2访问构造传感器
- C DLL通过C#UWP应用程序中的Win运行时组件适用于ARM,但对于X86/X64不适用于
- 相机枚举的选项和UWP应用程序的HAL(WPF/C CLI DLL)
- 基于 C++ 的 UWP 应用中缺少关机管理器类
- 如何以编程方式退出或关闭 UWP C++应用?
- 如何从功能(C UWP应用程序)中修改按钮内容
- 在 UWP 应用程序中,future.wait() 在尝试同步来自异步方法的响应时继续等待