设为首页 收藏本站
查看: 794|回复: 0

[经验分享] 构建一个Outlook风格漂亮界面框架,源码分享

[复制链接]

尚未签到

发表于 2015-9-14 09:17:54 | 显示全部楼层 |阅读模式
  在这里,我将分享一个Outlook风格界面框架的源代码,并详细介绍如何介绍一个漂亮、通用、可扩展、可换肤的界面框架。首先,我们来看一下这个框架的运行效果。你可以从以下地址下载该框架的可执行程序:Outlook风格界面框架。
DSC0000.png
  下面我们来介绍一下如何构建这样的界面框架。
1 实现原理
  该界面框架基于OSGi.NET面向服务插件平台构建,我们希望其它插件可以通过定义界面扩展信息将插件实现的功能注册到这个界面框架中。在这个界面框架,导航栏菜单是由其它插件来注册到。当点击导航菜单时,将插件提供的窗体或者控件显示在右边的内容区域。
DSC0001.png
  这个界面框架的实现原理同上一篇《发布一个简单界面框架源码,教你一步一步编写通用界面框架》相同,在这里我就不多累赘。接下来我将介绍如何实现这个界面框架。
2 界面框架实现
  
2.1 Outlook风格界面设计
  该框架主界面由ToolStrip、NavigateBar、TabControl和StatusStrip四个控件组成,其布局如下所示。
DSC0002.png
2.2 界面扩展信息处理
  在这里,一方面要先通过插件上下文IBundleContext获取扩展信息并处理,另一方面还要监控事件变更。
DSC0003.png
  在AddApplication方法里,它将Extension对象转换成相应的界面元素。其实现步骤为:
  (1)创建一个NavigateBarButton,对应于导航栏菜单下半部分的按钮;
  (2)为NavigateBarButton相应的内容区域创建一个TreeView,用于显示导航栏具体的菜单,并为其注册菜单选择事件;
  (3)设置NavigateBarButton其它属性,包括Image、ToolTipText等;
  (4)记录Extension对应的对象模型WinShellApplication与NavigateBarButton的映射关系。
DSC0004.png
  以上代码实现了扩展信息获取、为扩展信息注册界面元素的功能。该界面框架还需要响应扩展变更事件,即当插件被启动时,为其自动添加界面元素,反之当插件被停止或者卸载时,需要删除相应的界面元素。以下代码是变更事件响应。在这里,需要注意的是:由于扩展事件响应并不是在UI线程,而是一个普通线程,因此,在这个事件中,对UI界面的操作必须要由当前UI线程来操作,因此我们创建了一个Delegate并调用Control.Invoke方法将这段代码转交给UI线程操作。
DSC0005.png
  在扩展变更事件中,RemoveApplication完成和AddApplication相反的操作,就不再赘述了。
2.3 界面框架事件
  这个通用的界面框架默认处理了以下的事件:(1)点击导航菜单事件——在导航区域显示对应的窗体/界面控件;(2)内容区域选择事件——当在内容区域选择一个Tab时,需要同时选择导航区域;(3)内容区域关闭事件——点击关闭使,移除一个界面。这里,我重点介绍导航菜单事件响应。
  
  当选择左边导航菜单时,我们需要为该菜单在内容区域创建一个TabPage实例,用于显示其定义的窗体或者控件。在这里,如果已经为其创建过TabPage,则直接选中,否则创建TabPage。
DSC0006.png
  创建菜单对应的TabPage分为以下几个步骤:
  (1)加载菜单对应的窗体/用户控件类型,即使用菜单对应的扩展信息的插件来加载类型。
  (2)创建窗体/用户控件实例,并初始化一些基本信息;
  (3)创建TabPage,将窗体/用户控件添加到该TabPage并将TabPage添加到内容区域;
  (4)记录菜单和TabPage的对应关系。
DSC0007.png
3 界面框架源码
  
  有关界面框架的构建已经基本描述完成,一些更细节的东西,比如导航树形菜单构建、扩展信息处理方法,可以查看源码。有关如何使用该界面框架的使用视频、介绍和源码,你可以从以下地址获取:http://www.iopenworks.com/Products/ProductDetails/Introduction?proID=8。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-113327-1-1.html 上篇帖子: outlook express 经常崩溃2G文件问题 下篇帖子: 将outlook中的邮件批量导出为txt
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表