开源System.Windows.Forms库,让.Net Micro Framework界面开发和上位机一样简单
2009-12-15 15:11
381 查看
.Net Micro Framework本身支持WPF界面开发,但是对国内用户来说,WPF开发相对比较陌生,并且.Net Micro Framework对此功能的支持并不完善,Button、TextBox、ListBox、PictureBox等等基本控件并不支持,所以要想在.Net Micro Framework上开发出一套相对复杂的窗体界面还是比较困难的。
System.Windows.Form库就是在这种背景下开发出来的,它提供的接口和控件,和.Net Framework及.Net Compact Framework保持兼容,也可以说是.Net Compact Framework的一个窗体子集(不仅仅是子集,有写功能略有扩展,如Graphics类支持图片透明、渐变、圆角矩形绘制等等方法)。
由于.Net Micro Framework的IDE开发环境并不支持所见即所得的窗体设计功能(以后有时间可以为MF开发这一功能),所以我们可以取巧,用.Net Framework和.Net Compact Framework开发环境设计窗体,然后把相关窗体文件(如Form1.cs和Form1.designer.cs文件)直接导入到.Net Micro Framework工程中,稍加删减即可为.Net Micro Framework所用。
System.Windows.Form目前包括Button、TextBox、ListBox、ComboBox、CheckBox、GroupBox、RadioButton、PictureBox、ProgressBar、VScrollBar、HScrollBar等11种常用控件,此外还提供了MessageBox方法。
包含两类窗体、普通窗体及模式窗体,含义和windows平台相同。
此外System.Windows.Form提供两种界面风格,上面的计算器显示的是SideShow风格的窗体,缺省风格和.Net Compact Framework一致(如下图):
值得一提的是,System.Windows.Form完美支持中文,提供了Arial两种类型的字体(规则、粗体),含有3000多个常用汉字及字符。其使用方法和.Net Framework一致,如果您一致使用缺省字体,您会忽略还有字体设置这一说法的存在。不过考虑到.Net Micro Framework用到资源有限的设备上,所以还是把字体库进行了剥离,可以根据需要自行增删字体(默认字库的大小为546k)。
下面的图例就是基于System.Windows.Form库开发的应用程序。
System.Windows.Form库支持多窗体,并且支持软键盘,所以考虑到窗体关闭、切换等操作,故引入了任务栏(和Windows Mobile的任务栏有些类似),相关功能如下图所示。
为了便于说明System.Windows.Form库的方便性,我们试着比较一下.Net Micro Framework默认窗体开发和用System.Windows.Form库开发的代码区别。
.Net Micro Framework默认窗体程序包含两个文件,一个是按钮配置程序GPIOButtonInputProvider.cs,相关代码如下:
第二个是主体文件Program.cs,代码如下:
而用System.Windows.Form库开发的窗体程序则和.Net Framework及.Net Compact Framework相同,包括三个文件,第一个文件是窗体设计文件Form1.Designer.cs,代码如下:
第二个是窗体文件Form1.cs,代码如下:
第三个是启动文件Program.cs,代码如下:
从以上比较可以看出,采用System.Windows.Form库开发的窗体简单,并且和.Net Framework及.Net Compact Framework没有任何区别,所以很方便的把相应平台上的代码移植到.Net Micro Framework上来。
System.Windows.Form库除了字体操作和位图取之.Net Micro Framework原图形库,其它所有函数和类库,均自行编写,和.Net Micro Framework自带的WPF库没有任何关系。目前System.Windows.Form库开发的难点主要在控件焦点切换和刷新方面,现在的版本是测试版,后面将继续优化,如有可能核心源码考虑用C++本地代码进行实现,这样性能就会得到大幅度提升。
后续版本的开发计划暂考虑如下:
1、 TextBox控件继续完善,支持光标操作;
2、 支持中文输入法;
3、 开发ListView和TreeView控件;
4、 部分核心代码用C++本地代码实现。
【源码下载】
http://www.sky-walker.com.cn/yefan/SourceCode/YFWindows.rar
【技术交流】http://space.cnblogs.com/group/MFSoft/
System.Windows.Form库就是在这种背景下开发出来的,它提供的接口和控件,和.Net Framework及.Net Compact Framework保持兼容,也可以说是.Net Compact Framework的一个窗体子集(不仅仅是子集,有写功能略有扩展,如Graphics类支持图片透明、渐变、圆角矩形绘制等等方法)。
由于.Net Micro Framework的IDE开发环境并不支持所见即所得的窗体设计功能(以后有时间可以为MF开发这一功能),所以我们可以取巧,用.Net Framework和.Net Compact Framework开发环境设计窗体,然后把相关窗体文件(如Form1.cs和Form1.designer.cs文件)直接导入到.Net Micro Framework工程中,稍加删减即可为.Net Micro Framework所用。
System.Windows.Form目前包括Button、TextBox、ListBox、ComboBox、CheckBox、GroupBox、RadioButton、PictureBox、ProgressBar、VScrollBar、HScrollBar等11种常用控件,此外还提供了MessageBox方法。
包含两类窗体、普通窗体及模式窗体,含义和windows平台相同。
此外System.Windows.Form提供两种界面风格,上面的计算器显示的是SideShow风格的窗体,缺省风格和.Net Compact Framework一致(如下图):
值得一提的是,System.Windows.Form完美支持中文,提供了Arial两种类型的字体(规则、粗体),含有3000多个常用汉字及字符。其使用方法和.Net Framework一致,如果您一致使用缺省字体,您会忽略还有字体设置这一说法的存在。不过考虑到.Net Micro Framework用到资源有限的设备上,所以还是把字体库进行了剥离,可以根据需要自行增删字体(默认字库的大小为546k)。
下面的图例就是基于System.Windows.Form库开发的应用程序。
System.Windows.Form库支持多窗体,并且支持软键盘,所以考虑到窗体关闭、切换等操作,故引入了任务栏(和Windows Mobile的任务栏有些类似),相关功能如下图所示。
为了便于说明System.Windows.Form库的方便性,我们试着比较一下.Net Micro Framework默认窗体开发和用System.Windows.Form库开发的代码区别。
.Net Micro Framework默认窗体程序包含两个文件,一个是按钮配置程序GPIOButtonInputProvider.cs,相关代码如下:
using Microsoft.SPOT; using Microsoft.SPOT.Input; using Microsoft.SPOT.Hardware; using Microsoft.SPOT.Presentation; namespace MFWindowApplication1 { public sealed class GPIOButtonInputProvider { public readonly Dispatcher Dispatcher; private ButtonPad[] buttons; private DispatcherOperationCallback callback; private InputProviderSite site; private PresentationSource source; /////////////////////省略多个按钮操作相关函数///////////////////// } }
第二个是主体文件Program.cs,代码如下:
using System; using Microsoft.SPOT; using Microsoft.SPOT.Input; using Microsoft.SPOT.Presentation; using Microsoft.SPOT.Presentation.Controls; namespace MFWindowApplication1 { public class Program : Microsoft.SPOT.Application { public static void Main() { Program myApplication = new Program(); Window mainWindow = myApplication.CreateWindow(); GPIOButtonInputProvider inputProvider = new GPIOButtonInputProvider(null); myApplication.Run(mainWindow); } private Window mainWindow; public Window CreateWindow() { mainWindow = new Window(); mainWindow.Height = SystemMetrics.ScreenHeight; mainWindow.Width = SystemMetrics.ScreenWidth; Text text = new Text(); text.Font = Resources.GetFont(Resources.FontResources.small); text.TextContent = Resources.GetString(Resources.StringResources.String1); text.HorizontalAlignment = Microsoft.SPOT.Presentation.HorizontalAlignment.Center; text.VerticalAlignment = Microsoft.SPOT.Presentation.VerticalAlignment.Center; mainWindow.Child = text; mainWindow.AddHandler(Buttons.ButtonUpEvent, new ButtonEventHandler(OnButtonUp), false); mainWindow.Visibility = Visibility.Visible; Buttons.Focus(mainWindow); return mainWindow; } private void OnButtonUp(object sender, ButtonEventArgs e) { Debug.Print(e.Button.ToString()); } } }
而用System.Windows.Form库开发的窗体程序则和.Net Framework及.Net Compact Framework相同,包括三个文件,第一个文件是窗体设计文件Form1.Designer.cs,代码如下:
namespace Test { partial class Form1 { #region Windows Form Designer generated code private void InitializeComponent() { this.label1 = new System.Windows.Forms.Label(); this.SuspendLayout(); // // label1 // this.label1.Location = new System.Drawing.Point(105, 69); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(125, 12); this.label1.Text = ".Net Micro Framework"; // // Form1 // this.Controls.Add(this.label1); this.Name = "Form1"; this.Text = "Form1"; this.ResumeLayout(false); } #endregion private System.Windows.Forms.Label label1; } }
第二个是窗体文件Form1.cs,代码如下:
using System; using System.Drawing; using System.Windows.Forms; namespace Test { public partial class Form1 : Form { public Form1() { InitializeComponent(); this.KeyDown += new KeyEventHandler(Form1_KeyDown); } void Form1_KeyDown(object sender, KeyEventArgs e) { Debug.Print(e.KeyCode.ToString()); } } }
第三个是启动文件Program.cs,代码如下:
using System; namespace Test { static class Program { static void Main() { Application.Run(new Form1()); } } }
从以上比较可以看出,采用System.Windows.Form库开发的窗体简单,并且和.Net Framework及.Net Compact Framework没有任何区别,所以很方便的把相应平台上的代码移植到.Net Micro Framework上来。
System.Windows.Form库除了字体操作和位图取之.Net Micro Framework原图形库,其它所有函数和类库,均自行编写,和.Net Micro Framework自带的WPF库没有任何关系。目前System.Windows.Form库开发的难点主要在控件焦点切换和刷新方面,现在的版本是测试版,后面将继续优化,如有可能核心源码考虑用C++本地代码进行实现,这样性能就会得到大幅度提升。
后续版本的开发计划暂考虑如下:
1、 TextBox控件继续完善,支持光标操作;
2、 支持中文输入法;
3、 开发ListView和TreeView控件;
4、 部分核心代码用C++本地代码实现。
【源码下载】
http://www.sky-walker.com.cn/yefan/SourceCode/YFWindows.rar
【技术交流】http://space.cnblogs.com/group/MFSoft/
相关文章推荐
- 开源System.Windows.Forms库,让.Net Micro Framework界面开发和上位机一样简单
- 【.Net Micro Framework PortingKit(补) – 1】USB驱动开发 推荐
- RDIFramework.NET(.NET快速信息化系统开发框架) Web版界面样例(可参考) 推荐
- 【.Net Micro Framework PortingKit – 11】NandFlash驱动开发
- RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2->新增模块管理界面导出功能(可按条件导出)
- .Net Micro Framework 嵌入式开发
- 【.Net Micro Framework PortingKit - 02】STM3210E平台构建
- C#实现多级子目录Zip压缩解压实例 NET4.6下的UTC时间转换 [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程 asp.net core异步进行新增操作并且需要判断某些字段是否重复的三种解决方案 .NET Core开发日志
- RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2-> Web版本新增新的用户权限设置界面效率更高、更规范
- 【.Net Micro Framework PortingKit – 11】NandFlash驱动开发
- RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2->WinForm版本重构岗位授权管理界面更规范、高效与美观
- RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2->Web版本新增新的角色授权管理界面效率更高、更规范
- RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2->Web版本新增新的角色授权管理界面效率更高、更规范
- RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2-> Web版本新增新的用户权限设置界面
- RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2->Web版本工作流部分业务处理界面与查看界面全新展示
- .Net Micro Framework 4.0正式开源
- RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2->Web版本模块管理界面新增模块排序功能
- RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2->Web版本模块管理界面新增模块排序功能
- 【Visual Studio风格开发系列 - 可视化界面设计】Create And Host Custom Designers With The .NET Framework 2.0 (英文原文)
- 【.Net Micro Framework PortingKit(补) – 1】USB驱动开发