ui元素和Windows窗体控件的区别是什么?
本文关键字:区别 是什么 控件 窗体 元素 Windows ui | 更新日期: 2023-09-27 18:06:09
如果我想在传统的Windows窗体中创建一个带有绘图区域的窗体,我将扩展面板类,然后覆盖onPaint方法来进行自定义绘图,如下所示:
public class SpecialPanel : System.Windows.Forms.Panel
{
protected override void OnPaint(PaintEventArgs e)
{
Graphics G = e.Graphics;
G.DrawEllipse(new Pen(Color.Red), 50, 80, 50, 10);
}
}
但是在WPF中,如果我尝试扩展画布类,则没有onPaint方法来覆盖
public class SpecialCanvas : Canvas //Error no OnPaint method
{
public override OnPaint(PaintEventArgs e)
{
}
}
如果我想在画布上绘制,我会这样做:
Canvas.SetLeft(shape.shape, r.Next(1, 1150));
Canvas.SetTop(shape.shape, r.Next(1, 500));
SolidColorBrush b = new SolidColorBrush(Windows.UI.Color.FromArgb(255, (byte)r.Next(1, 255), (byte)r.Next(1, 255), (byte)r.Next(1, 255)));
shape.shape.Fill = b;
shape.shape.Stroke = b;
Cann.Children.Add(shape.shape);
其中Cann
为画布对象,shape.shape
为矩形。
我的问题是,这些绘制形式的方法之间的根本区别是什么?
WPF与GDI的基本区别/GDI+
Windows演示基础(WPF)从根本上不同于图形设备接口(GDI)和GDI+,要求以不同的方式处理编程的许多方面。本主题简要概述了主要区别。
使用GDI/GDI+ API构建的应用程序使用许多窗口,并且驻留在父窗口(MDI)下。使用WPF构建的应用程序只有一个窗口。
计量单位
使用GDI/GDI+ API构建的应用程序使用硬件像素作为度量单位。在这些应用中,随着显示设备分辨率的增加,所得到的图像会减少。内置在WPF中的应用程序使用与设备无关的单位(1/96英寸)作为测量单位。当系统的DPI为96时,两者等效。 控制定位使用GDI+构建的应用程序使用绝对定位。当父元素调整大小时,子元素不会随之调整大小。内置在WPF中的应用程序可以使用绝对定位、动态定位或数据绑定定位。无论是绝对定位还是动态定位,控件都相对于父元素进行定位。
<<p> 图像基础/strong>在GDI/GDI+中形成的图像是基于像素的光栅图像。在WPF中形成的图像可以是可缩放的矢量图像。
渲染引擎
GDI和GDI+都是在Win32上构建的。GDI基于设备上下文的概念,其中应用程序获得设备上下文的句柄,并使用这些句柄与设备进行交互。GDI+是GDI的包装器,它可以创建一个c++图形对象。另一方面,WPF是建立在DirectX上的,这意味着它可以在执行绘图操作时利用硬件加速。
<<p> 渲染模式/strong>使用GDI和GDI+,渲染使用即时渲染:应用程序重新绘制失效的区域。在WPF中,渲染使用保留渲染:应用程序跟踪绘制信息,但系统执行绘制。
绘画对于GDI和GDI+,裁剪用于确定已经失效并需要绘制的区域的边界。在WPF中,绘制是从后到前进行的,组件相互绘制。
钢笔和画笔
GDI和GDI+使用了当前画笔和当前笔的概念。在WPF中,每次绘图调用都必须传递笔刷和笔。
油漆区域优化
绘制区域优化是GDI或GDI+绘制的重要组成部分。在WPF中不考虑它。
GDI和GDI+使用订阅/通知来使用事件和事件处理程序委托。WPF使用冒泡、隧道和直接事件通知,事件在VisualTree中上下传播。
视频和音频
GDI+或Windows Forms不提供对视频和音频的直接支持,但必须通过诸如Windows media player之类的媒体播放器获得。WPF直接支持视频和音频。
source:
http://www.leadtools.com/help/leadtools/v18/dh/to/leadtools.topics~leadtools.topics.differencesbetweengdiandwpf.html