WinForm和WPF的区别「建议收藏」

一、控件的差异作为Windows桌面UI开发的两大.net开发库,WinForm和WPF同时存在着。之所以功能如此重合的两个库同时存在,是因为两者的底层差异非常大,WinForm底层依赖于传统的Win32API,特别是User32.dll;而WPF则底层依赖于Direct3D。而我们知道User32和Direct3D两者是平行存在,彼此独立的。WPF之前几乎所有的WindowsUI开发都依赖于User32,当然游戏除外。随着Direct3D的日趋成熟和显卡的普通性能提升,微软力图改变这种状况,所以开发

大家好,又见面了,我是你们的朋友全栈君。

一、控件的差异

作为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组成。如下图所示。

WinForm和WPF的区别「建议收藏」

WinForm和WPF的区别「建议收藏」

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

WinForm和WPF的区别「建议收藏」

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

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/128583.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 微信小程序一个js文件读取多个接口数据「建议收藏」

    微信小程序一个js文件读取多个接口数据「建议收藏」我也不知道这个叫啥问题我也不知道这样写是不是不对数据确实拿到了data:{warningarr:null,mydata:null,mySensor:null},/***生命周期函数–监听页面加载*/onLoad:function(options){ ……/*自己的…

    2022年8月18日
  • CentOS-yum卸载docker环境

    CentOS-yum卸载docker环境卸载docker1.卸载命令$yumremovedocker.x86_64$yumremovedocker-client.x86_64$y…

    2022年6月5日
  • 远程线程注入突破SESSION 0

    远程线程注入突破SESSION0SESSION0隔离在WindowsXP、WindowsServer2003,以及更老版本的Windows操作系统中,服务和应用程序使用相同的会话(Se

    2021年12月13日
  • sql 时间日期格式转换[通俗易懂]

    sql 时间日期格式转换[通俗易懂]sql时间日期格式转换

    2022年8月30日
  • RFID RC522门禁系统「建议收藏」

    RFID RC522门禁系统「建议收藏」RFIDRC522门禁系统RFIDRC522门禁系统说明:基于51单片机的RFIDRC522门禁系统的主要功能是,在本系统中主要是演示了RFIDRC522门禁系统,在单片机内部的RAM中IDBUFFER中存了学号:1505106001对应16进制就是5bb61851;然后在RFIDRC522开卡系统中,为第一张卡在块地址0x08处,写入了学号,当卡中…

    2022年9月19日
  • queue_work函数_generate_series函数

    queue_work函数_generate_series函数函数说明在计算机程序中,线程是一种很重要的资源,使用的恰当可以极大的提高程序的效率,也就是多线程的使用,但是多线程会让应用程序变得异常复杂,会占用大量的系统资源。就像QQ表情一样,每一个QQ表情的闪动都需要构建一个线程,如果用户使用了大量的表情,将会有多少个线程在运行,系统的性能将大大减少,甚至导致死机。在这种情况下,多线程变得不太合适了,那么什么机制适用于这种情况下呢,这就是线程池。通常情况…

    2022年9月25日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号