为什么Surface Pro上的最大X和Y触摸坐标与原生显示分辨率不同?

时间:2013-02-27 19:39:19

标签: windows-8 windows-store-apps

我注意到Surface Pro和我相信Sony Vaio Duo 11报告的最大触摸坐标为1366x768,这对我来说很惊讶,因为它们的原始显示分辨率是1920x1080。 有没有人知道在运行时找出最大触摸坐标是什么?我在XAML下面运行一个DirectX应用程序,因此我必须将触摸坐标缩放到我自己的世界坐标中,如果不知道比例因子是什么,我就无法做到这一点。

这是我正在运行的代码,它会查看触摸坐标:

来自DirectXPage.xaml

<Grid PointerPressed="OnPointerPressed"></Grid>

来自DirectXPage.xaml.cpp

void DirectXPage::OnPointerPressed(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ args)
{
   auto pointerPoint = args->GetCurrentPoint(nullptr);
   // the x value ranges between 0 and 1366
   auto x = pointerPoint->Position.X;
   // the y value ranges between 0 and 768
   auto y = pointerPoint->Position.Y;
}

此外,这是一个示例项目设置,如果在Surface Pro上运行,可以演示此问题: http://andrewgarrison.com/files/TouchTester.zip

2 个答案:

答案 0 :(得分:1)

  

他们的原生显示分辨率为1920x1080

这使得显示器适合高清平板电脑配置文件,一切都自动缩放140%。当然,对于任何报告的触摸位置,发生相反的不缩放。你永远不应该超过1371,771。这确保了任何商店应用程序都可以在任何设备上运行,无论其显示质量如何,并且应用程序代码不需要帮助,除了提供在应用程序重新调整为140和180%时仍然看起来很清晰的位图。因此,你根本不应该做任何事情。目前还不清楚你要解决什么问题。

一篇描述自动缩放功能is here的优秀文章。

答案 1 :(得分:1)

XAML端的所有内容都是在与设备无关的像素中测量的。理想情况下,您永远不必担心实际的物理像素,让winrt在后台发挥其魔力。

如果某个季节您需要找到当前的比例因子,您可以使用DisplayProperties.ResolutionScale并使用它将DIP转换为屏幕像素。