当前位置:主页   - 电脑 - 网站开发 - ASP.Net
Paint.Net学习笔记——三、窗体(下)
来源:网络   作者:   更新时间:2012-08-23
收藏此页】    【字号    】    【打印】    【关闭

  近1个月没有更新了,不能再懒了,继续更新PDN的学习笔记!本节将说明PDN中窗体的继承关系,实现过程等。

Paint.Net学习笔记——三、窗体(下)

  如上图所示,在PDN中,所有窗体都继承自PdnBaseForm类,该类继承自Form类与ISnapManagerHost接口,该接口定义了SnapManager的get方法,SnapManager是管理界面窗口“粘靠”效果的,该实现方法之后文章中讲述。

  现在快速地过一下各个窗体的作用及特点。

  BaseForm:

  所有PDN里窗体的基类,主要提供常用窗体方法及注册、卸载热键。

  1、RegisterFormHotKey(Keys,Function<bool,Keys>):注册热键

  PDN拥有设置、处理、卸载热键的功能,这方便了滤镜开发者的开发。RegisterFormHotKey方法参数中,有个Function<bool,Keys>。该参数是一个泛型委托,该委托的类型有三种,说明实现该委托的方法可有多种重载形式。而且该委托的实例,必须实现IComponent和IHotKeyTarget接口,也就是说,该委托必须由一个窗体发出。在BaseForm中,hotkeyRegistrar是热键注册字典,保存了所有已注册的键及委托。接下来的事情就简单了,重写ProcessCmdKey方法,处理窗体的键盘事件,并从字典中找到该键所对应的委托,执行之。

  窗体热键注册

1    /**//// <summary>
2    /// 注册窗体范围的热键,以及当热键摁下的委托。
3    /// 该委托的发起方必须是一个控件,不论是窗体还是窗体还是基本控件,都必须相应该热键,而且这些窗体都必须继承自PdnBaseForm
4    /// </summary>
5    public static void RegisterFormHotKey(Keys keys, Function<bool, Keys> callback)
6    {
7      IComponent targetAsComponent = callback.Target as IComponent;
8      IHotKeyTarget targetAsHotKeyTarget = callback.Target as IHotKeyTarget;
9
10      if (targetAsComponent == null && targetAsHotKeyTarget == null)
11      {
12        //检查委托是否由窗体发出
13        throw new ArgumentException("target instance must implement IComponent or IHotKeyTarget", "callback");
14      }
15
16      if (hotkeyRegistrar == null)
17      {
18        //初始化热键字典
19        hotkeyRegistrar = new Dictionary<Keys, Function<bool, Keys>>();
20      }
21
22      Function<bool, Keys> theDelegate = null;
23
24      if (hotkeyRegistrar.ContainsKey(keys))
25      {
26        如已注册热键,替换热键委托
27        theDelegate = hotkeyRegistrar[keys];
28        theDelegate += callback;
29        hotkeyRegistrar[keys] = theDelegate;
30      }
31      else
32      {
33        //把热键和委托添加到字典中
34        theDelegate = new Function<bool, Keys>(callback);
35        hotkeyRegistrar.Add(keys, theDelegate);
36      }
37
38      if (targetAsComponent != null)
39      {
40        targetAsComponent.Disposed += TargetAsComponent_Disposed;
41      }
42      else
43      {
44        targetAsHotKeyTarget.Disposed += TargetAsHotKeyTarget_Disposed;
45      }
46    }

其它资源
来源声明

版权与免责声明
1、本站所发布的文章仅供技术交流参考,本站不主张将其做为决策的依据,浏览者可自愿选择采信与否,本站不对因采信这些信息所产生的任何问题负责。
2、本站部分文章来源于网络,其版权为原权利人所有。由于来源之故,有的文章未能获得作者姓名,署“未知”或“佚名”。对于这些文章,有知悉作者姓名的请告知本站,以便及时署名。如果作者要求删除,我们将予以删除。除此之外本站不再承担其它责任。
3、本站部分文章来源于本站原创,本站拥有所有权利。
4、如对本站发布的信息有异议,请联系我们,经本站确认后,将在三个工作日内做出修改或删除处理。
请参阅权责声明