WinForm和WPF的区别

一、控件的差异

作为Windows桌面UI开发的两大.net开发库,WinForm和WPF同时存在着。之所以功能如此重合的两个库同时存在,是因为两者的底层差异非常大,WinForm底层依赖于传统的Win32API,特别是User32.dll;而WPF则底层依赖于Direct3D。 而我们知道User32和Direct3D两者是平行存在,彼此独立的。WPF之前几乎所有的WindowsUI开发都依赖于User32,当然游戏除外。随着Direct3D的日趋成熟和显卡的普通性能提升,微软力图改变这种状况,所以开发出了WPF来让一般的应用程序也使用Direct3D进行UI开发。当然,这一改变的影响是巨大的,传统的User32是以窗口为基础的,所有的控件都是一种特殊的窗口而已。而在Direct3D里,不再有窗口的存在。下面我们通过一个简单的实例来对比WinForm程序和WPF程序。

两者的UI看起来完全一样,都是有两个TextBox和一个Button组成。如下图所示。

启动Spy++,查找这两个程序的主窗口,见下面的红色区域。

可以很清楚的看出,WinForm程序中的每个控件都是一个窗口,而WPF程序中的控件不再是窗口。

由于WPF中的控件不再是窗口,所以和控件的通信就不能再使用窗口消息(SendMessage)了,这将导致很大的开发差异。

< ps:《C#实现不同窗口间的消息通信》的2种方法可参考https://blog.csdn.net/dong123ohyes/article/details/117160473 >

尽管WinForm和WPF中的控件类名相同,但其实两者没有任何关联,各自定义在不同的命名空间中。

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值