扯淡

 

WPF是下一代WINDOWS桌面程序开发的主流,而Silverlight也是微软在RIA上的重要一步,而且随着WIN PHONE7一起,也成了以后微软手机开发的主要工具。现在Silverlight也是火的不得了。加上FLEX,HTML5,现在的程序员也是越来越难当,每天都要被新技术,新概念,新名次不断的轰炸。虽然很多东西对于我们这菜鸟级的程序员根本用不上,也没有太多公司会跟风而上。毕竟技术只是为了更好的创造利润。但作为对新鲜事务有着强烈好奇心的我们来说,没空多了解小也是挺好的。

 

WPF/Silverlight已经出了了3年多了,应该说比较成熟了,随着WINDOWS7和.NET4.0的发布,我想以后的桌面应用程序以及WEB程序会想着更绚,更酷,更方便的方向发展。WINDOWS 7的绚丽效果我想用过以后就在也不想换回XP了吧。哈哈。软件已将从如何做软件到如何做好软件,而现在是要到如何做用户喜欢的软件了。我想一个漂亮的等待界面和一个简陋的等待提示相比,用户也不会在乎那1.,2秒的查询速度,而对于WEB软件,能像桌面程序一样操作一直是美好的梦想,随着RIA框架的涌现,现在越来越关注的也是交互和操作了。

 

稍微唠叨了下,WPF/Silverlight 09年就准备开始学习,当时也没什么资料,而且加上工作忙,一出差就给耽误了,不过大致看过一遍SDK的文档,还算有点点基础。现在在一看,3。0,4.0都出来了。而且书籍和相关资料也渐渐多了起来。自己也懒得边学边写,因为网上很多,没有重复的制造轮子啊。 把学习中收集到的一些很好的文章收录在这里,不定期更新:

 

相关资料

 

 

WPF和以往的WINFORM最大的不同就在于它的显示上,WINFORM是使用GDI/GDI+,而WPF则是使用了DirectX,而在WINDOWS7下,系统的图形显示相对于XP也有了很大的改性(其实是VISTA相对XP),在WIN7下有一个DWM(Desktop Windows Manager)。关于DWM的解释可以参见MSDN : http://msdn.microsoft.com/en-us/library/aa969540(VS.85).aspx

下面2个是关于WIN7图形架构和在DWM下GDI和DirectX的工作方式,关于GDI+和DirectX不熟悉的话可以大概了解下,我也只是在上一个项目中有所使用,才有了一定了解。对于学习WPF来说大概了解就行了。

深度解读 – Windows 7核心图形架构细致分析

Redirecting GDI, DirectX, and WPF applications

下面一遍文章介绍了WPF中的图形的呈现过程和内部操作,个人感觉很好,和上面2个文章有一些相关联的东西

一站式WPF–Window(一)

园子里别人写的学习笔记,很全了,快速入门。恩,没有必要在造轮子了。

WPF and Silverlight 学习笔记:索引页

半年没有写东西了。也就出差了半年。半年没有用C#,写了半年VC,呵呵。有时候其实有挺多东西写的,不过一忙起来人就懒了。简单的东西不想写,复杂的又写不了,哈哈。最近不是太忙,大概看了下COM组件模型,然后对DLL工作,库文件有了一些兴趣。因为工作和自己写的程序可以延伸到这些知识上,所以对DLL进行了一定的了解,而且对于直接开始编写C#应用程序的人来说,也很少会去了解这些,所以决定写下来。

 

 

 一 库文件

 

 

库文件是我们在接触编程时经常听到的词。那么什么是库文件。其实库文件是一种重用的思想。比如我们自己编写C#的程序,可能会把公用的一些方法放在一个名为Common的项目中,然后编译成DLL,其他项目引用这个程序集,就可以调用这个里面的方法,而不用自己去实现。在说的大一点,.NET中提供给我们使用的类,也是存放在.NET库中的。而整个WINDOWS系统,都是建立在库文件基础上的。

实在最初的时候是没有库文件的概念,所有功能都是自己实现的。为了提高效率,减少重复工作,就必须对代码重用。重用方法有很对,比如对于一些通用的方法的实现代码让编译器自己生成,但这个问题是,一旦方法变更会添加,编译器也必须修改了。另一个方法是把常用的方法编译成.obj模块文件。这样在编译的时候,去链接这些模块文件,就能实现代码重用。但是所有方法放到一个obj文件中,文件会很庞大,占用内存;如果为每个方法提供一个obj文件,那又会相当的麻烦。

于是就出现了静态库(static library),静态库是一个或多个.obj文件的集合。使用到这些.obj文件对应的函数时,只需要在连接时提供该静态库,而不需要列举用到的.obj文件。而连接器进行连接的时候,只会将程序中用到的函数对应的.obj文件连接到程序中。静态库的形式就是我们WINDOWS上常见的.lib文件。但静态库的确定是,每个程序使用时都会吧需要的obj文件拷贝到内存中,100个程序就有100个拷贝,这样对内存的浪费很大,而且如果静态库文件更新的话,程序也需要重新编译,进行连接。于是共享库(shared library,也叫做动态连接库)就出现了。首先他是被加载到公用的内存空间中,是所有程序共享的,所以对节省了内存;另外他在编译时没有象静态库那样,把代码直接连接到了程序中,只是插入了动态库的一些信息,供调用时使用。这样,我们就有可能直接修改动态库,而不需要重新编译程序。

动态库当然也有他的问题,比如DLL HELL。DLL Hell 是指当多个应用程序共享一个DLL或COM组件时所引发的一系列问题。比如一个应用程序安装一个新版本DLL,而该DLL与机器上的现有版本不向后兼容。这样就可能导致以前的引用程序引发异常。而.NET的强命名程序集就解决了这个问题,它通过程序集(DLL)名称、语言、版本、KEY来区分DLL,而不仅仅是只通过名字。也就能保证对个版本的DLL同时工作。

 

继续阅读