使用DotNetBar制作漂亮的WinFrom界面,自定义AgileEAS.NET SOA平台WinClient主界面

一、前言

     AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台。用于帮助中小型软件企业建立一条适合市场快速变化的开发团队,以达到节省开发成本、缩短开发时间,快速适应市场变化的目的。

     AgileEAS.NET SOA中间件平台提供了敏捷快速开发软件工程的最佳实践,通过提供大量的基础支撑功能如IOC、ORM、SOA、分布式体系及敏捷并发开发方法所支撑的插件开发体系,以及提供了大量的实体、数据模型设计生成工具、代码生成工具,用于帮助中小软件开发商快速成长。

     AgileEAS.NET平台充分把握目前软件行业快速发展的新趋势,基于敏捷并行开发、快速适应市场这样淳朴的软件工程实践,采用业界广泛使用的Microsoft .Net构件(组件)开发技术实践了这种开发思想,帮助软件企业实现“敏捷变化、快速适合”的目标,从而帮助软件企业在激烈的市场竞争中赢得先机并获得更高的回报。

二、关于WinClient的外挂资源体系介绍

     最初版本的AgileEAS.NET SOA中间件平台的运行容器/外壳是没有界面替换体系,最初只是提供了替换关键部分的图片、文字的功能,随着AgileEAS.NET SOA中间件被众多的客户应用到各行各业之后,我们从客户的应用反馈之中进行了大量的重构,其中运行容器也越来越开放,从最初令开放替换部分图片到慢慢开放可以自由修改其他的导航栏、Banner、状态栏、菜单、登录界面、关于界面,发生了很大的变化,同步我们也提供了Desktop、MDI、Dockable等多种界面风格,可以说客户有更我的选择了。

     随着更多软件企业或组织加入应用AgileEAS.NET SOA中间件行业,有许多的客户已经不能满足于在这几种风格之中进行选择,希望能给自己最大的自定义空间和范围,提供了更换主界面的需求,我们积极的响应这种需求,并且提出了相关的解决方案,并且在2012年AgileEAS.NET SOA 5.0版本的时间向大家提供。

     主界面替换被某一些我们服务于的客户所使用,但是对于广大的关心AgileEAS.NET SOA中间件的朋友来说,并不能得到我们细致并且一对一的服务,因为我们还没有变此部分内容给大家做过介绍和在公开的案例之中提供,所以对于社区之中的很多朋友来说,还能灵活的应用本部分内容。

     下图是一个典型的AgileEAS.NET SOA中间件平台WinClient容器的主界面:

     其中包含以下组成部分:

 

     主菜单:界面最上部的主菜单,系统、视图和帮助。

     导航菜单:通过菜单之中的菜单项可以打开指点的功能模块。

     导航栏:同系统导航菜单、以树形或者其他形式展示。

     状态栏:显示系统的一些状态信息,如操作消息、当前登录信息等。
     内容区:除以上项目外的界面空白区域为业务工作区,即模块插件的工作区域,新打开的模块在经区域显示和工作。

     启始页:特指工作区之中第一个打开的模块,当系统登录完成之后会自动打开一个模块,此模块称为起始页模块。

三、IResource接口

     AgileEAS.NET SOA 中间件平台为了应用对运行容器的各个部分进行自定义和扩展,提供了一个资源接口IResource:

   1: using System;
   2:  
   3: namespace EAS.Explorer
   4: {
   5:     /// <summary>
   6:     /// 运行容器的外壳资源。
   7:     /// </summary>
   8:     public interface IResource
   9:     {
  10:         /// <summary>
  11:         /// 获取应用系统的图标,用于替换主界面的图标。
  12:         /// </summary>
  13:         System.Drawing.Icon GetMainIcon();
  14:  
  15:         /// <summary>
  16:         /// 获取默认的模块图标,用于简约、经典风格的Tab页图标显示,也用于Desktop模式的桌面图标显示。
  17:         /// </summary>
  18:         System.Drawing.Image GetModuleIcon();
  19:  
  20:         /// <summary>
  21:         /// 获取桌面背景图像,用于Desktop模式的桌面模块。
  22:         /// </summary>
  23:         System.Drawing.Image GetDesktopImage();
  24:  
  25:         /// <summary>
  26:         /// 获取应用系统的导航控件,用于替换平台的导航控件。
  27:         /// </summary>
  28:         /// <returns>WinForm/WPF用户控件。</returns>
  29:         object GetNavigationControl(); 
  30:  
  31:         /// <summary>
  32:         /// 获取应用系统的Banner控件,用于替换平台的Banner条。
  33:         /// </summary>
  34:         /// <returns>WinForm/WPF用户控件。</returns>
  35:         object GetBannerControl(); 
  36:  
  37:         /// <summary>
  38:         /// 获取应用系统的Bottom控件,用于替换平台的状态栏。
  39:         /// </summary>
  40:         /// <returns>WinForm/WPF用户控件。</returns>
  41:         object GetBottomControl(); 
  42:  
  43:          /// <summary>
  44:         /// 获取WinForm/WPF容器的关于对话框,用于替换平台的关于对话框。
  45:         /// </summary>
  46:         /// <returns>WinForm/WPF窗体。</returns>
  47:         object GetAboutForm();
  48:  
  49:         /// <summary>
  50:         /// 获取WinForm/WPF容器的主界面,用于替换平台的主界面。
  51:         /// </summary>
  52:         /// <returns>WinForm/WPF窗体。</returns>
  53:         object GetMainShell();        
  54:  
  55:         /// <summary>
  56:         /// 获取WinForm/WPF/Silverlight容器的登录对话框,用于替换平台的登录对话框。
  57:         /// </summary>
  58:         /// <returns>WinForm/WPF/Silverlight窗体。</returns>
  59:         ILoginForm GetLoginForm();
  60:  
  61:         /// <summary>
  62:         /// 获取WinForm/WPF容器的起始页/初始模块,用于替换平台的起始页。
  63:         /// </summary>
  64:         /// <returns>WinForm/WPF用户控件。</returns>
  65:         object GetStartModule();
  66:  
  67:         /// <summary>
  68:         /// 获取系统的名称,显示在运行环境的导航栏。
  69:         /// </summary>
  70:         /// <returns>应用系统名称。</returns>
  71:         string GetApplicationName();
  72:  
  73:         /// <summary>
  74:         /// 获取系统的标题,显示在运行环境的主窗口之上。
  75:         /// </summary>
  76:         /// <returns>应用系统名称。</returns>
  77:         string GetApplicationTitle();
  78:  
  79:         /// <summary>
  80:         /// 是否显示主菜单。
  81:         /// </summary>
  82:         bool DisplayMainMenu
  83:         {
  84:             get;
  85:         }
  86:  
  87:         /// <summary>
  88:         /// 是否显示导航工具条。
  89:         /// </summary>
  90:         bool DisplayNavigationTool
  91:         {
  92:             get;
  93:         }
  94:     }
  95: }

     实现AgileEAS.NET SOA 平台的资源替换即是实现IResource接口的过程,在我们DrugShop、SmartERP案例之中都有对应的实现项目DrugShop.Res和SmartERP.Res。

     当然,光实现IResource还不购,还需要修改系统的配置文件,以便让资源生效:

   1: <;!--资源-->
   2: <object name="EAS.Explorer.Resource" assembly="DrugShop.Res" type="DrugShop.Res.Resources" LifestyleType="Singleton"/>

     需要注意的是在EAS.Explorer.dll程序集之中还定义了以下两个接口,INavigation接口:

   1: using System;
   2: using System.Collections.Generic;
   3: using System.Linq;
   4: using System.Text;
   5: using System.Text.RegularExpressions;
   6: 
   7: namespace EAS.Explorer
   8: {
   9:     /// <;summary>
  10:     /// 导航控件接口。
  11:     /// <;/summary>
  12:     public interface INavigation
  13:     {
  14:         /// <;summary>
  15:         /// 初始化导航。
  16:         /// <;/summary>
  17:         /// <;param name="m_GroupList">导航清单。</param>
  18:         /// <;param name="m_ModuleList">模块清单。</param>
  19:         void Initialize(IList<;INavigateGroup> m_GroupList, IList<INavigateModule> m_ModuleList);
  20:     }
  21: }

     ILoginForm接口:

   1: using System;
   2: using System.Collections.Generic;
   3: using System.Linq;
   4: using System.Text;
   5:  
   6: namespace EAS.Explorer
   7: {
   8:     /// <;summary>
   9:     ///  定义登记对话框接口,用于实现自定义登录。
  10:     /// <;/summary>
  11:     public interface ILoginForm
  12:     {
  13:         /// <;summary>
  14:         /// 是否已经通过登录验证。
  15:         /// <;/summary>
  16:         bool Passed { get; }
  17:     }
  18: }

     自定义的导航控件必须实现INavigation接口,以便于平台实现导航的初始化,方法Initialize由平台调用,传入当前系统登录人员所具有权限的模块清单及相关的导航清单。

     自定我的登录界面必须实现ILoginForm,以便于系统判定登录界面是否完成了登录验证。

四、IMainShell接口和自定义主界面

     第三节在介绍IResource接口的时候我们会发现其他有一个GetMainShell()方法,其用于获取资源实现之中的主界面定义,系统主界面必须是一个Form并且要实现IMainShell接口:

   1: using System;
   2: using System.Collections.Generic;
   3: using System.Linq;
   4: using System.Text;
   5:  
   6: namespace EAS.Explorer
   7: {
   8:     /// <;summary>
   9:     /// 定义主界面接口,用于实现自定义主界面。
  10:     /// <;/summary>
  11:     public interface IMainShell
  12:     {
  13:         /// <;summary>
  14:         /// 初始化主界面,根据平台传入的模块清单和相关的导航分组初始化主界面。
  15:         /// <;/summary>
  16:         /// <;param name="m_GroupList">导航清单。</param>
  17:         /// <;param name="m_ModuleList">模块清单。</param>
  18:         void InitializeShell(IList<;INavigateGroup> m_GroupList, IList<INavigateModule> m_ModuleList);
  19:  
  20:         /// <;summary>
  21:         /// 加载/打开指定模块,响应系统的模块打开操作。
  22:         /// <;/summary>
  23:         /// <;param name="module">模块实例。</param>
  24:         void OpenModule(object module);
  25: 
  26:         /// <summary>
  27:         /// 关闭当前模块(活动的模块)。
  28:         /// <;/summary>
  29:         void CloseModule();
  30: 
  31:         /// <summary>
  32:         /// 关闭指定模块。
  33:         /// <;/summary>
  34:         /// <;param name="module">模块实例。</param>
  35:         void CloseModule(object module);
  36: 
  37:         /// <summary>
  38:         /// 切换导航,展开、隐藏导航,主界面没有导航的隐藏、展开需求可以不处理。
  39:         /// <;/summary>
  40:         void SwitchNavigation();
  41: 
  42:         /// <summary>
  43:         /// 当前活动插件/模块。
  44:         /// <;/summary>
  45:         object ActiveAddIn
  46:         {
  47:             get;
  48:         }
  49:  
  50:         /// <;summary>
  51:         /// 已打开的插件/模块集合。
  52:         /// <;/summary>
  53:         List<;object> AddIns
  54:         {
  55:             get;
  56:         }
  57:     }
  58: }

     其中InitializeShell方法:用于平台传入当前系统登录人员所具有权限的模块清单及相关的导航清单,由自定义界面实现界面的初始化。

     OpenModule方法:用于实现对模块的打开,平台传入要打开的模块,由主界面进行处理,实现主界面对模块的动态加载。

     CloseModule方法:用于关闭已经打开的模块,并对界面进行清理。

     SwitchNavigation方法:切换导航,展开、隐藏导航,主界面没有导航的隐藏、展开需求可以不处理。

     ActiveAddIn属性:向平台返回当前的活动模块。

     AddIns属性:向平台返回已加载的模块清单。

四、自定义界面实例

     近期 有朋友建议使用devcomponents或者DotNetBar为大家演示一下如何自定义平台的主体界面,参考了网有对devcomponents和DotNetBar相关的资料之后我们选择了较为轻量级的DotNetBar为大家演示如何替换系统的主界面。

     我们使用DotNetBar所提供的一些控件实现了以下三种风格的主体界面:

     第一种是Win7/Ribbon风格的主界面RibbonShell,如下图所示:

     其对应代码为DrugShop案例之中的DrugShop.Res项目之中的RibbonShell.cs程序文件。

     第二种为类似Visual Studio界面风格的DockableShell,其效果如下:

     其对应代码为DrugShop案例之中的DrugShop.Res项目之中的DockableShell.cs程序文件。

     第三种为不包含导航栏的简单MDI界面风格的TabShell,其效果如下:

     其对应代码为DrugShop案例之中的DrugShop.Res项目之中的TabShell.cs程序文件。

五、关于代码

     以上介绍了三种风格的自定义主界面的例子,例子不多,也不复杂,或许也不能满足所有人的美观度需求和功能需求,其目的在于抛砖引用,希望借此文让更多的开发者加入到我们的行列之中来,做出更加美观大方的界面。

     关于以上三种风格自定义界面代码,我们已经合并到DrugShop案例SmartEPR案例之中,请大家在AgileEAS.NET SOA中间件官方网站最新下载栏目进行下载。

     在启动自定义界面的过程之中切记要修改资源项目之中IResource的实现代码之中的GetMainShell方法代码:

   1: public object GetMainShell()
   2: {
   3:     return new RibbonShell(); //Ribbon风格自定义界面。
   4:     //return new DockableShell(); //Dockable风格自定义界面。
   5:     //return new TabShell(); //TabMdi风格自定义界面。
   6:     //return null; //使用AgileEAS.NET SOA平台自带界面。
   7: }

    本文所使用的是DotNetBar115版本,有关于DotNetBar115请通过http://42.121.30.77/downloads/DotNetBar115.rar下载。

六、联系我们

     为完善、改进和推广AgileEAS.NET而成立了敏捷软件工程实验室,是一家研究、推广和发展新技术,并致力于提供具有自主知识产权的业务基础平台软件,以及基于业务基础平台开发的管理软件的专业软件提供商。主要业务是为客户提供软件企业研发管理解决方案、企业管理软件开发,以及相关的技术支持,管理及技术咨询与培训业务。

     AgileEAS.NET SOA中间件平台自2004年秋呱呱落地一来,我就一直在逐步完善和改进,也被应用于保险、医疗、电子商务、房地产、铁路、教育等多个应用,但一直都是以我个人在推广,2010年因为我辞职休息,我就想到把AgileEAS.NET推向市场,让更多的人使用。

     我的技术团队成员都是合作多年的老朋友,因为这个平台是免费的,所以也没有什么收入,都是由程序员的那种理想与信念坚持,在此我感谢一起奋斗的朋友。

团队网站:http://www.agilelab.cn

AgileEAS.NET网站:http://www.smarteas.net

官方博客:http://eastjade.cnblogs.com

QQ:47920381,AgileEAS.NET

QQ群:113723486(AgileEAS SOA 平台)/上限1000人

199463175(AgileEAS SOA 交流)/上限1000人

212867943(AgileEAS.NET研究)/上限500人

147168308(AgileEAS.NET应用)/上限500人

172060626(深度AgileEAS.NET平台)/上限500人

116773358(AgileEAS.NET 平台)/上限500人

125643764(AgileEAS.NET探讨)/上限500人

193486983(AgileEAS.NET 平台)/上限500人

邮件:james@agilelab.cn,mail.james@qq.com,

电话:18629261335。

时间: 2024-10-22 07:20:37

使用DotNetBar制作漂亮的WinFrom界面,自定义AgileEAS.NET SOA平台WinClient主界面的相关文章

mfc-做一个VC++ MFC系统,怎样可以在主界面根据用户权限隐藏和显示主界面的菜单选项,谢谢

问题描述 做一个VC++ MFC系统,怎样可以在主界面根据用户权限隐藏和显示主界面的菜单选项,谢谢 譬如说用户为管理员.老师.学生 用户为管理员.老师时,显示考勤管理按钮 用户为学生就隐藏考勤管理按钮 解决方案 首先,根据登陆的用户判断权限: 其次,根据不同的权限,显示不同的菜单项.这个需要用到"动态菜单"的技巧.如:VC++中动态生成菜单技巧如何动态添加菜单/菜单项.子菜单.右键菜单如何隐藏已有的菜单项? 解决方案二: 一种是动态添加需要的菜单,没有权限得不添加 一种是隐藏,菜单项有

实例演示如何使用AgileEAS.NET SOA平台工作流进行业务流程自定义

在说这个案例之前先向大家转发一个简单的招聘信息,我们团队目前需要招聘两名技术助理人员,跟随我们做一些产品开发和技术咨询工作,欢迎有志同道合的朋友与我们合作:http://job.cnblogs.com/offer/19632/. 一.案例业务流程说明 在前一篇文章AgileEAS.NET SOA 中间件平台工作流系统介绍之中我简单的向大家介绍了AgileEAS.NET SOA平台工作流系统的基本介绍,本文我将向大家以一个真实的案例向大家介绍AgileEAS.NET SOA平台工作流系统的应用.

node webkit-在node-webkit开发过程中 主界面如何与子窗口通信

问题描述 在node-webkit开发过程中 主界面如何与子窗口通信 比如A界面为程序启动后出现的主界面,在A界面进行相关的操作,如修改.删除等,会弹出对应的修改或删除窗口B:A与B之间数据怎么传递呢,B处理完了想要调出主界面该怎么做呢

visual studio 2010-VS2010 MFC登录对话框打开数据库失败后意外出现主界面的问题

问题描述 VS2010 MFC登录对话框打开数据库失败后意外出现主界面的问题 用VS2010 MFC建立了一个主界面为对话框的函数,要求需要登录对话框,且通过读取数据库来校验用户,代码如下: BOOL CManagementDlg::OnInitDialog()//主对话框初始函数 { CDialogEx::OnInitDialog(); _CLogInDlg dlgLogin; if(dlgLogin.DoModal() != IDOK)//登录对话框 { OnOK(); return TRU

PS制作漂亮的光晕背景界面

PS制作漂亮的光晕背景界面         注:更多请关注photoshop教程栏目,三联PS教程群:181754111欢迎你的加入 分类: PS入门教程

Android制作漂亮自适布局键盘的方法_Android

最近做了个自定义键盘,但面对不同分辨率的机型其中数字键盘不能根据界面大小自已铺满,但又不能每种机型都做一套吧,所以要做成自适应,那这里主讲思路. 这里最上面的titlebar高度固定,下面输入的金额高度也固定(当然也可以自适应),主要是中间的数字键盘,高度和宽度需要自适应.先来张效果图: 最常见的解决方案是用线性布局,自适应当然是按比例,但布局中无%的概念,那就要用到layout_weight了,该属性的作用是决定控件在其父布局中的显示权重(具体概念就不多说了). 这里用一个LinearLayo

photoshop制作漂亮的3d文字壁纸教程

photoshop制作漂亮的3d文字壁纸教程,在本教程中大家将学习到如何用PS创建多彩的3D文字效果. 在本教程中大家将学习到如何用PS创建多彩的3D文字效果.(这个教程不是特别完美 大家凑活着读吧) 创建一个1280×1024 px, 72 dpi的新文件(文件>新建).然后选择矩形工具(U)在整个工作区域中画一个矩形. 然后设置混合选项>渐变叠加.按下图设置: 然后选择自定义图形工具(U),选择下图的形状: 把它放在下图所示的位置: 按下图设置不透明度: 设置下图的混合选项: 你将得到如下

Photoshop制作漂亮笔记本网站首页模板

Photoshop制作漂亮的笔记本电子商务网站首页模板教程,效果确实很好. 1.在PS中新建一个文档,768*800px,并填充#1e2528. 2.添加LOGO,在左上角,并给它新建一个图层. 3.新建一个图层.并使用图层样式为其添加一个渐变效果. 4.使用减淡工具,并设置10%的不透明度,给图像加个高光.如图: 5.现在加入菜单文字.使用文字工具并设置如图,颜色#444b44. 6.在文字下面加入下划线.也在菜单上面加入一条线,来做区分用. 7.在头部加个产品图像和产品介绍. 8.来看一下如

FlashCS4中制作漂亮的气泡动画教程

  FlashCS4中制作漂亮的气泡动画,是考试中必考的试题,本文对FlashCS4中制作漂亮的气泡动画 教程进行了具体阐述供阅读.大家请仔细阅读下文! 详细代码: function ball(r:int):MovieClip {//自定义函数 ball,参数为 r,整数型,返回值为 MovieClip var col:uint=0xffffff*Math.random();//声明一个无符号整数型变量 col,获取任意颜色 var sh:MovieClip=new MovieClip();//