How to detect screen resolution from a Direct3D app for Windows Phone 8

[ This article is for Windows Phone 8 developers. If you’re developing for Windows 10, see the latest documentation. ]

This topic shows you how to determine the screen resolution from a Windows Phone Direct3D app. Windows Phone 8 supports phones that have WVGA, WXGA, and 720p resolutions. The Bounds property of the CoreWindow class returns the screen resolution in device-independent pixels. For example, Bounds returns 480 × 800 on a WXGA phone, but the resolution of the phone in physical pixels is 768 × 1280. You can use the ResolutionScale property to determine the resolution in physical pixels from the resolution in device-independent pixels.

The following table describes the resolutions and aspect ratios you can target in your Windows Phone 8 app.

Resolution

Pixels

Aspect ratio

Change from Windows Phone OS 7.1

Scaled resolution

WVGA

480 × 800

15:9

None

480 × 800

WXGA

768 × 1280

15:9

1.6x scale

480 × 800

720p

720 × 1280

16:9

1.5x scale, 80 pixels taller (53 pixels, before scaling)

480 × 853

Deciding which images to load based on screen resolution

  • Query the ResolutionScale property. If the returned value is Scale100Percent, you know the screen is WVGA. If the returned value is Scale150Percent, the screen is WXGA. If the value is Scale16Percent, the screen is 720p.

        switch (DisplayProperties::ResolutionScale) {
    
            case ResolutionScale::Scale100Percent: LoadSmallBitmaps(); break;
            case ResolutionScale::Scale150Percent: LoadMediumBitmaps(); break;
            case ResolutionScale::Scale160Percent: LoadLargeBitmaps(); break;
        }
    

Converting screen size to physical pixels

  • Call the GetForCurrentThread()()() method to obtain a reference to your app’s CoreWindow object. Check the Bounds property. Multiply the returned width and height by ResolutionScale / 100.0 to get the dimensions in physical pixels.

        CoreWindow^ m_window = CoreWindow::GetForCurrentThread();
        Rect bounds = m_window->Bounds;
        bounds.Height *= ((int) DisplayProperties::ResolutionScale) / 100.0;
        bounds.Width *= ((int) DisplayProperties::ResolutionScale) / 100.0;