把从http://www.afterdawn.com/software/source_codes/paint.net.cfm下载到的PDN3.05源码下载下来后,解压出来src目录下就是PDN的解决方案目录了,可以使用VS2005或VS2008打开解决方案。
在所有工程中,核心的工程为 DataEffectsPaintdotnetPdnLibSystemLayer。而其中Paintdotnet是启动项目,程序从Startup.cs启动。
现在我们就来看看PDN的启动有什么奥秘吧。
Startup的构造函数接受一个string[]作为启动参数。
应用程序从Main方法启动,我们一起一步一步看看PDN是怎么启动的。
使用Main方法的启动参数构造一个新的Startup对象,并调用Start方法。
Start方法中,一进来就注册了应用程序域的异常事件,这样做,就防止了应用程序域中的任何未捕捉到异常弹出.net异常对话窗口导致用户不知所措。
接下来检查系统DPI兼容,在这里我们一路跟踪定义,进入了SafeNativeMethods类中,发现此类不简单,这里除了方法定义外,没有方法的实现,都是清一色的[DllImport]。小弟系井底之蛙,一开始搞不懂这个属性是什么意思,于是翻查MSDN:
发现[DllImport]描述的方法,都是调用了windows本身的非托管代码,并一定要加上extend关键字以及都必须为静态方法。
而在此调用的SetProcessDPIAware说明在此:http://msdn.microsoft.com/zh-cn/library/aa970067.aspx
接下来如果启动参数中不包含"/skipRepairAttempt",进入StartPart2。
PDN对应多种语言系统,并能加载不同的语言资源,这是怎么做到的呢?
版权与免责声明
1、本站所发布的文章仅供技术交流参考,本站不主张将其做为决策的依据,浏览者可自愿选择采信与否,本站不对因采信这些信息所产生的任何问题负责。
2、本站部分文章来源于网络,其版权为原权利人所有。由于来源之故,有的文章未能获得作者姓名,署“未知”或“佚名”。对于这些文章,有知悉作者姓名的请告知本站,以便及时署名。如果作者要求删除,我们将予以删除。除此之外本站不再承担其它责任。
3、本站部分文章来源于本站原创,本站拥有所有权利。
4、如对本站发布的信息有异议,请联系我们,经本站确认后,将在三个工作日内做出修改或删除处理。
请参阅权责声明!