代码之家  ›  专栏  ›  技术社区  ›  Asim Sajjad

无分辨率应用

  •  4
  • Asim Sajjad  · 技术社区  · 14 年前

    无分辨率应用程序是什么意思,正如我和我的许多朋友讨论过的,他们说无分辨率意味着任何时候分辨率用户想要看到的应用程序,它应该调整它的位置,分辨率是监视器分辨率,或者说100乘100分辨率是什么?

    5 回复  |  直到 14 年前
        1
  •  0
  •   Myrddin Emrys    14 年前

    我认为这意味着在不同的决议中,比例应该是相同的。这并不意味着应用程序将在内部调整窗口大小以适应新的分辨率。但这不是普遍现象。

    另一件很重要的事要提的是,它所带来的背景。例如,对 Web应用程序 ,这可能会根据分辨率更改布局或页面大小。 电子游戏 可能会使事物 very differently 取决于屏幕分辨率和纵横比。规则的 Windows应用程序 (gui),我已经提到过了。

        2
  •  3
  •   Archie    14 年前

    理想情况下,应用程序将使用更高的像素密度来显示更多的细节。例如,高分辨率监视器可以显示同样大小的工具栏图标,但使用额外的像素来呈现更清晰的图形。这样,您可以保持相同的基本布局,但提供更多的清晰度和细节。由于各种原因,这种解决方案在过去是不可能实现的。虽然您可以调整用gdi/gdi+、user32(为常用控件生成视觉效果)绘制的图形内容的大小,但它不支持真正的缩放。

    WPF不存在这个问题,因为它呈现所有用户界面元素本身,从简单的形状到按钮等常见控件。因此,如果您在计算机显示器上创建一个1英寸宽的按钮,它可以在高分辨率显示器上保持1英寸宽。WPF将简单地以更详细和更像素的形式呈现它。

    wpf的缩放基于系统dpi设置,而不是物理显示设备的dpi。它在计算尺寸时使用系统dpi设置。

    WPF单元

    一个WPF窗口及其内的所有元素都是使用独立于设备的单元来测量的。单个设备独立单元定义为1/96英寸。要理解这在实践中意味着什么,您需要考虑一个例子。

    假设您在WPF中创建了一个小按钮,大小为96×96个单位。如果您正在使用标准Windows DPI设置(96 dpi),则每个设备独立单元对应一个实际物理像素。因为wpf使用这个计算:

    [Physical Unit Size] = [Device-Independent Unit Size] × [System DPI]
    
                     = 1/96 inch × 96 dpi
    
                     = 1 pixel
    

    本质上,wpf假设一英寸需要96像素,因为Windows通过系统dpi设置告诉它。然而,现实取决于你的显示设备。

    例如,考虑一个20英寸的液晶显示器,最大分辨率为1600 x 1200像素。使用少量毕达哥拉斯,可以计算此监视器的像素密度,如下所示:

    [Screen DPI] = ((Sqroot of)(1600*1600)+(1200*1200))pixels/19 inches = 100dpi
    

    在这种情况下,像素密度可以达到100 dpi,比Windows假设的略高。因此,在该显示器上,96 x 96像素的按钮将略小于1英寸。

    另一方面,考虑使用分辨率为1024 x 768的15英寸液晶显示器。在这里,像素密度下降到约85 dpi,因此96 x 96像素按钮看起来略大于1英寸。

    在这两种情况下,如果您减小屏幕大小(例如,通过切换到800×600分辨率),按钮(以及每个其他屏幕元素)将按比例变大。因为系统dpi设置保持在96 dpi。换言之,Windows继续假设一英寸需要96个像素,即使在较低的分辨率下,它需要的像素要少得多。

    参考文献: C语言2008中的Pro WPF:Windows .NET 3.5的演示文稿基础,第二版

        3
  •  2
  •   Josh    14 年前

    WPF使用与设备无关的坐标,这意味着应用程序可以在不同的DPI设置下正确、均匀地缩放。

    WPF的另一个非常有用的特性是viewbox,它可以用来创建一个可伸缩的应用程序。尝试以下操作。

    <Window x:Class="WpfApplication2.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Width="300" Height="300">
        <Viewbox Stretch="Uniform">
            <Grid Width="300" Height="300">
                <Button Content="Button" Margin="16,8,0,0" 
                        Width="104" Height="32" 
                        HorizontalAlignment="Left" 
                        VerticalAlignment="Top" />
                <CheckBox Content="CheckBox" Margin="136,8,0,0" 
                          Width="112" Height="24" 
                          HorizontalAlignment="Left" VerticalAlignment="Top" />
            </Grid>
        </Viewbox>
    </Window>
    

    这个简单的例子有点脱离了窗口标题栏和边框的原因,但是您已经了解了这个想法。调整此窗口的大小后,内容将均匀缩放,以便在任何分辨率下都保持相同。

        4
  •  1
  •   Polaris    14 年前

    您可以为应用程序使用WPF。您在窗体上创建的每个控件将以不同的屏幕分辨率显示。

    WPF声称的主要好处之一是决议独立性。通常,这种好处用相对模糊的术语来描述,这使人们相信,这意味着无论设置监视器的分辨率如何,相同的WPF窗口都将以相同的大小显示在任何监视器上。