3

我需要考虑设备可以处于的不同方向。也就是横向、横向翻转、纵向或纵向翻转。我的应用程序是用本机 C++ 编写的,并且作为桌面应用程序在 Windows 8.1 上运行(无论如何都不需要跨平台)。

我知道我可以使用 Microsoft 在此处列出的方法确定设备是纵向还是横向:http: //msdn.microsoft.com/en-us/library/ms812142.aspx

但是,无法区分横向和横向翻转(或纵向和纵向翻转)。

我可以通过检查DisplayInformation.CurrentOrientation属性得到我需要的东西, 但它是一个 WinRT API。这意味着如果我想使用它,我的应用程序必须使用 CLR,这是一个非首发。

此外,我真的很想将我的应用程序保留为单个可执行文件,我认为没有一种干净的方法可以做到这一点并同时调用托管 API。但是话又说回来,我对本机+托管代码集成非常缺乏经验。

那么,有没有人知道在 Windows 中仅使用本机代码来确定显示方向的任何方法?

4

3 回答 3

3

我想通了。这实际上比我想象的要容易得多。EnumDisplaySettings() 不会填充 DEVMODE 结构中的 dmDisplayOrientation 字段,但EnumDisplaySettingsEx()会。所以这实际上真的很容易:)

这里有一个很好的例子。

于 2013-11-13T22:33:56.290 回答
0

检测 XAML 中的窗口 SizeChanged:

<Page x:Class="ClockCpp.MainPage"
      Loaded="Page_Loaded"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:local="using:ClockCpp"
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
      mc:Ignorable="d"
      Background="black"
      SizeChanged="Page_SizeChanged">

然后使用是在纵向或横向之间切换:

Boolean t46 = true;
void ClockCpp::MainPage::Page_SizeChanged(Platform::Object^ sender, Windows::UI::Xaml::SizeChangedEventArgs^ e)
{
        if (t46 == true)
        {
            t46 = false; // portrait
            timetext->FontSize = 120; // 2/3 of 180
            Othercontrols->Visibility = Windows::UI::Xaml::Visibility::Visible;
        }
        else
        {
            t46 = true; // landscape
            timetext->FontSize = 180;
            Othercontrols->Visibility = Windows::UI::Xaml::Visibility::Collapsed;
        }   
}
于 2017-07-28T21:32:45.063 回答
0

您还可以比较屏幕的高度和宽度。如果宽度值更高,那么它就是风景,反之亦然..

#include <windows.h>

int theScreenWidth = GetSystemMetrics(SM_CXFULLSCREEN);
int theScreenHeight = GetSystemMetrics(SM_CYFULLSCREEN);
if (theScreenWidth > theScreenHeight) 
    MessageBox(NULL,"Run in landscape.","Landscape",MB_OK);
else
    MessageBox(NULL,"Run in portrait.","Portrait",MB_OK);
于 2017-10-16T04:30:36.473 回答