首页 / 软件开发 / .NET编程技术 / Paint.Net学习笔记——二、窗体(上)
Paint.Net学习笔记——二、窗体(上)2011-08-20 博客园 懵盛盛在PDN顺利执行了启动逻辑后,就进入Application.Run(new MainForm(arg))了,接下来我们一起来 看看Main里面有什么奥秘。进入MainForm类,发现该类继承自PdnBaseForm类,而这个基类的注释里,说明了该基类用于修复 Form类中透明度不能为1.0的bug,那么我们之后再看,还是先看看MainForm(string[])构造函数。在该构造函数中,一进来先是检查启动参数。(如何使用启动参数启动PDN?这里提供一个比较简单 的方法:进入CMD(命令行模式),进入PDN安装目录中,并执行paintdotnet.ext /splash或/test等启 动参数)。(splashForm是启动欢迎窗口)如果没有启动参数,则构造一个空白的画布:构造空白画布// no file specified? create a blank image
if (fileNames.Count == 0)
{
//设置画布定位单位
MeasurementUnit units = Document.DefaultDpuUnit;
double dpu = Document.GetDefaultDpu(units);
Size newSize = this.appWorkspace.GetNewDocumentSize();
this.appWorkspace.CreateBlankDocumentInNewWorkspace(newSize, units, dpu, true);
this.appWorkspace.ActiveDocumentWorkspace.IncrementJustPaintWhite();
this.appWorkspace.ActiveDocumentWorkspace.Document.Dirty = false;
}
以上代码中,Document、AppWorkspace都是非常重要的概念,我以后会单独说明,现在还是继续往下 看。之后调用了LoadWindowState()来设置窗体尺寸。这个方法里仔细看一下,原来窗体初始化尺寸也是 使用注册表保存的,有兴趣的朋友可以修改一下这些值看看效果。初始化工作基本完成了,还有最后两句:启动一个定时器以及注册应用程序空闲事件。这两个事件我 在这里也说一下:从定时器变量命名上看出,该定时器是用来延时一些操作的,转到定时器出发事件中,我们看到定时 器只执行一次,执行的方法为this.appWorkspace.ToolBar.MainMenu.PopulateEffects();。一路追踪进 去,发现该方法的作用为“加载滤镜PluginDLL”,使用延时定时器来触发该方法,避免了应用程序启动 时需要加载过多DLL而造成假死现象。这样做,大大加快了应用程序的启动速度。窗体初始化的最后,注册了一句:Application_Idle事件。该事件在应用程序空闲时触发。追踪到 ProcessMessage方法,该方法用作处理在队列中的Windows消息。