【问题标题】:How to set the orientation of a UWP app programmatically如何以编程方式设置 UWP 应用的方向
【发布时间】:2019-06-17 09:51:12
【问题描述】:

我正在为可以从两侧访问的物理设备开发 UWP 应用程序(显示器朝上)。默认方向是横向,我希望能够以编程方式翻转(旋转 180°)应用程序的方向。

我已经尝试了两种不同的方法:

1。使用 Win32 API 更改 Windows 显示方向

为此,您需要使用包含在 user32.lib 中的 API 函数,这是 UWP 应用程序无法完成/不允许的。因此,我编写了一个可以从 UWP 应用程序触发的单独程序。在这里你可以看到我是如何根据this question提供的代码实现显示方向的:

#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 的 Kiosk 模式下运行 UWP 应用程序时(正如我们打算做的那样),它会在旋转后隐藏应用程序,如果我之前与 UI 交互会显示一个空白屏幕(不知道为什么也发生了,对我来说看起来像一个错误)。如果我不与 UI 交互,旋转就可以正常工作,但这不是解决方案...

2。使用 DXGI 交换链来轮换应用?

谷歌搜索解决方案我很快发现了IDXGISwapChain1::SetRotation,还找到了this example program。但这一切似乎不是简单的 UWP 用户界面的正确解决方案,因为我们需要使用 DirectX 实现我们的 UI。如果我在这里错了,请纠正我。

3。更改 AutoRotationPreferences

我还尝试在按下按钮时执行以下命令,但它没有执行任何操作:

DisplayInformation^ displayInformation = DisplayInformation::GetForCurrentView();
displayInformation->AutoRotationPreferences = DisplayOrientations::LandscapeFlipped;

有没有办法在不改变窗口显示方向的情况下强制 UWP 应用的方向?

【问题讨论】:

  • 它将始终全屏运行

标签: c++ windows visual-studio uwp windows-10-universal


【解决方案1】:

您使用的 AutoRotationPreferences api 仅设计为在设备处于平板电脑模式时工作,因此在您的设备中不起作用。您可以考虑使用 SetDisplayConfig 设置屏幕旋转 来自启动时的 Win32 应用程序,我还将为此进行一些测试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-11
    • 1970-01-01
    • 2011-12-19
    • 2019-10-28
    • 2014-01-26
    • 1970-01-01
    • 2015-09-21
    相关资源
    最近更新 更多