在Metro应用程序中获取窗口尺寸

时间:2012-07-24 06:53:23

标签: javascript windows-8 microsoft-metro

如何在Windows 8 metro应用程序中获取窗口的尺寸?

我想用canvas元素填充屏幕,目前我的default.js文件看起来像这样

// ... some autogenerated code ...
app.onactivated = function (args) {
    if (args.detail.kind === activation.ActivationKind.launch) {
    // ... some autogenerated code ...

    var canvas = document.getElementById("myCanvas");
    var context = canvas.getContext("2d");

    canvas.width  = 600;  // I want to set width and height here so that
    canvas.height = 800;  // canvas fills the entire screen/window.
};
// ... more autogenerated code ...

3 个答案:

答案 0 :(得分:3)

要获得尺寸,您需要:

window.outerWidth
window.outerHeight

这将返回已应用的比例因子的逻辑大小。

请注意,您还需要侦听“查看状态更改”,并在进入/离开捕捉,填充,完整模式时确保您的UI调整为新的窗口大小。

具体来说,您需要使用CSS媒体查询匹配:

var snappedNotification = matchMedia("all and (-ms-view-state: snapped)");
snappedNotification.addEventListener(mySnappedFunction);

或者监听window.resize,并使用当前视图状态查看当前视图:

var currentViewState = Windows.UI.ViewManagement.ApplicationView.value;

http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.viewmanagement.applicationviewstate.aspx

答案 1 :(得分:1)

物理尺寸可以通过这种方式获得:

var displayInformation = Windows.Graphics.Display.DisplayInformation.getForCurrentView();
var scale = displayInformation.resolutionScale;
var height = Math.ceil(window.outerHeight * scale / 100);
var width = Math.ceil(window.outerWidth * scale / 100);

var physicalWidth = width / displayInformation.rawDpiX; // in inches
var physicalHeight = height / displayInformation.rawDpiY; // in inches
var physicalSize = Math.floor(Math.sqrt(Math.pow(physicalWidth, 2) + Math.pow(physicalHeight, 2)) * 10) / 10; // in inches

我在几种屏幕尺寸上尝试了这一点,在大多数情况下,physicalSize都是准确的,有时会出现0.1“错误。

我希望它有所帮助。

答案 2 :(得分:0)

以下JavaScript代码应该有效:

var height = $('#bodyTag').outerHeight(true);

var width = $('#bodyTag').outerWidth(true);

如果您想根据比例调整画布大小,也可以使用resolutionScale枚举:

var resolutionScale = Windows.Graphics.Display.DisplayProperties.resolutionScale;