我正在为可从两侧访问的物理设备开发UWP应用程序(显示屏朝上)。默认方向是“横向”,我希望能够以编程方式翻转(旋转180°)应用程序的方向。
我已经尝试了两种不同的方法:
为此,您需要使用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进行交互,则旋转效果很好,但这不是解决方案...
搜寻解决方案时,我很快遇到了IDXGISwapChain1::SetRotation,也发现了this example program。但这似乎不是一个简单的UWP用户界面的正确解决方案,因为我们需要使用DirectX来实现UI。如果我错了,请纠正我。
我也尝试在按下按钮时执行以下命令,但是它什么也没做:
DisplayInformation^ displayInformation = DisplayInformation::GetForCurrentView();
displayInformation->AutoRotationPreferences = DisplayOrientations::LandscapeFlipped;
是否可以在不更改窗口显示方向的情况下强制UWP应用定向?
答案 0 :(得分:0)
您使用的 AutoRotationPreferences API仅在设备处于平板电脑模式下才能工作,因此不适用于您的设备。您可以考虑使用 SetDisplayConfig设置屏幕旋转(在启动时使用Win32应用程序),我还将为此做一些测试。