`
isiqi
  • 浏览: 16360757 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

.Net Micro Framework研究—让MF支持英文输入法

阅读更多

一旦支持了鼠标功能,MF可研究的领域,似乎变得无穷无尽,这也许是我近几天一直陷于此中不能自拔的原因了。
有了鼠标即使没有键盘,我们也可以通过虚拟键盘完成输入工作。这个工作很有意义,也很有挑战性,因为这不是windows平台,也不是Dos平台,这是“一穷二白”的MF平台,所有的工作都得从头做起(实现绘制键盘,向有输入焦点控件发送按键信息,删除,添加字符等等功能)。
目前字符串不仅无法转换为数字,并且没有字符插入功能,所以这个函数也必须自己来实现,此外输入焦点光标也需要自己绘制,好了,先不说难处了,先看看最终成果。
这是一个文本输入实例,当文本框有输入焦点时,自动弹出输入面板。
虚拟键盘上的“Shift”键也是有效的,切换后可以输入符号和大写字母。
当文本框失去输入焦点的时候,虚拟键盘消失。
以上应用实现的代码如下:
//个人信息
public class YFSelfInfo : YFDialog
{
YFLabel[] label=new YFLabel[3];
YFText[] text=new YFText[3];
string[] strLabelName = new string[] {"姓名:","单位:","博客:"};
public YFSelfInfo(string Title, int Left, int Top, int Width, int Height, YFWindowBase Parent): base(Title, Width, Height, Parent)
{
//-------------
for(int i=0;i<3;i++)
{
label[i] = new YFLabel(strLabelName[i], 20, ClientRect.Top + 10+30*i,40, 20);
Children.Add(label[i]);
text[i] = new YFText("", 70, label[i].Top, 140, 20);
text[i].Enter += new YFSoft.SPOT.Presentation.YFEventHandler(text_Enter);
text[i].Leave += new YFSoft.SPOT.Presentation.YFEventHandler(text_Leave);
Children.Add(text[i]);
}
}
//获得输入焦点时显示输入面板
void text_Leave(object sender, EventArgs e)
{
HideInputPanel();
this.Height = SystemMetrics.ScreenHeight;
}
//失去焦点时隐藏输入面板
void text_Enter(object sender, EventArgs e)
{
ShowInputPanel();
this.Height = this.InputPanelTop + 1;
}
//主窗体鼠标信息
public override void OnMouseClick(object sender, MouseEventArgs e)
{
text_Leave(null, null);//隐藏输入面板
base.OnMouseClick(sender, e);
}
}
用户程序是不是很简单?再看看我实现的一个记事本程序
正在输入界面
菜单功能支持
相关代码如下:
//记事本
public class YFNote : YFDialog
{
YFText text;
public YFNote(string Title,int Left, int Top, int Width, int Height, YFWindowBase Parent)
: base(Title, Width, Height, Parent)
{
text = new YFText("", ClientRect.Left, ClientRect.Top, ClientRect.Width, ClientRect.Height);
text.BorderStyle = BorderStyle.None;
text.Align = false;
text.Enter += new YFSoft.SPOT.Presentation.YFEventHandler(text_Enter);
text.Leave += new YFSoft.SPOT.Presentation.YFEventHandler(text_Leave);
Children.Add(text);
this.Left = Left;
this.Top = Top;
Menu.AddItem(new MenuItem("新建"));
Menu.AddItem(new MenuItem("保存"));
Menu.AddItem(new MenuItem("-"));
Menu.AddItem(new MenuItem("退出"));
}
//获得输入焦点时显示输入面板
void text_Leave(object sender, EventArgs e)
{
HideInputPanel();
this.Height = SystemMetrics.ScreenHeight;
text.Height = ClientRect.Height;
}
//失去焦点时隐藏输入面板
void text_Enter(object sender, EventArgs e)
{
ShowInputPanel();
this.Height = this.InputPanelTop+1;
text.Height = ClientRect.Height;
}
//主窗体鼠标信息
public override void OnMouseClick(object sender, MouseEventArgs e)
{
text_Leave(null, null);//隐藏输入面板
base.OnMouseClick(sender, e);
}
//菜单
public override void OnMenuClick(MenuEventArgs e)
{
switch (e.Text)
{
case "新建":
text.Text = "";
break;
case "保存":
MessageBox("不好意思,暂时没有保存功能","记事本", MessageBoxButtons.OK, MessageBoxIcon.Warning);
break;
case "退出":
Close();
break;
}
base.OnMenuClick(e);
}
}
程序也超简单,但功能还是蛮强大的,我们下面看看虚拟键盘的相关代码,实现思路和鼠标功能一样,也是直接借助基类的虚拟函数,向指定的窗体和控件发送按键消息。
核心代码如下:
public void TransactKey(KeyState state, object sender, MouseEventArgs e)
{
//向控件发送按键消息
if (this.Parent != null)
{
Keys key = Keys.None;
int keyValue=0;
char _char = (char)0;
YFButton b = (YFButton)sender;
if (b.Text == "" || b.Text=="En" || b.Text=="Cn") return;
Button btn = Button.None;
switch (b.Text)
{
case "Tab":
key = Keys.Tab;
break;
case "Caps":
key = Keys.CapsLock;
break;
case "Shift":
key = Keys.Select;
break;
case "Ent":
key = Keys.Enter;
btn = Button.Select;
break;
case "Esc":
key = Keys.Escape;
break;
case "Ins":
key = Keys.Insert;
break;
case "Del":
key = Keys.Delete;
break;
case "Menu":
key = Keys.Menu;
btn = Button.Menu;
break;
case "↑":
key = Keys.Up;
btn = Button.Up;
break;
case "←":
key = Keys.Left;
btn = Button.Left;
break;
case "↓":
key = Keys.Down;
btn = Button.Down;
break;
case "→":
key = Keys.Right;
btn = Button.Right;
break;
case "<-":
key = Keys.Back;
btn = Button.Back;
break;
default:
_char = b.Text[0];
key = (Keys)b.Name[0];
break;
}
keyValue = (int)key;
//向当前有输入焦点的窗口发送系统按键消息
if (btn!= Button.None)
{
if ((state & KeyState.Down) > 0) Parent.GetFocus().OnButtonDownEx(new ButtonEventArgs(null, null, new TimeSpan(), btn));
if ((state & KeyState.Up) > 0) Parent.GetFocus().OnButtonUpEx(new ButtonEventArgs(null, null, new TimeSpan(), btn));
}
//获得输入焦点的控件
YFControl c = this.Parent.Children.GetFocus();
if (c != null)
{
if ((state & KeyState.Down) > 0) c.OnKeyDown(sender, new KeyEventArgs(key, keyValue, button[41].Checked, button[28].Checked, button[55].Checked));
if ((state & KeyState.Press) > 0 && _char != (char)0) c.OnKeyPress(sender, new KeyPressEventArgs(_char));
if ((state & KeyState.Up) > 0) c.OnKeyUp(sender, new KeyEventArgs(key, keyValue, button[41].Checked, button[28].Checked, button[55].Checked));
}
//父窗体要求接收按键消息
if (Parent.KeyPreview)
{
if ((state & KeyState.Down) > 0) Parent.OnKeyDown(Parent, new KeyEventArgs(key, keyValue, button[41].Checked, button[28].Checked, button[55].Checked));
if ((state & KeyState.Press) > 0 && _char != (char)0) Parent.OnKeyPress(Parent, new KeyPressEventArgs(_char));
if ((state & KeyState.Up) > 0) Parent.OnKeyUp(Parent, new KeyEventArgs(key, keyValue, button[41].Checked, button[28].Checked, button[55].Checked));
}
}
}
以上仅仅实现的是英文输入,中文输入怎么做?似乎要困难的多,此外粘贴、复制功能要不要做?总之有很多很多的东西值得我们去探索去实现,这一切,似乎我们在走Microsoft的老路,要在MF平台上实现一个Micro Windows!说到这我想到一个笑话,有一个人给上帝进行打赌说他也能造人。上帝问他,你怎么做,他说,我先用泥土捏一个…,“等等,”上帝打断了他,“你要用你自己的泥土”。
分享到:
评论

相关推荐

    Expert .NET Micro Framework

    The Microsoft .NET Micro Framework is a small and efficient .NET runtime environment used to run managed code on devices that are too small and resource constrained for Windows CE and the Compact ...

    Microsoft .net micro framework 4.0 SDK 含源码

    微软的.NET Micro Framework (NETMF) 是一个针对嵌入式设备和物联网(IoT)应用的轻量级、高效能的开发平台。它允许开发者使用C#和Visual Studio这样的高级语言和开发环境来构建和管理资源受限设备上的应用程序。.NET ...

    Microsoft .NET Micro Framework嵌入式编程(美 汤普逊)

    《Microsoft .NET Micro Framework嵌入式编程》是美国作者汤普逊所著的一本深入探讨.NET Micro Framework(简称.NET MF)技术的专业书籍。这本书旨在帮助读者理解和掌握如何在嵌入式系统中应用.NET Micro Framework...

    《玩转.NET Micro Framework移植-基于STM32F10x处理器》源程序.rar

    《玩转.NET Micro Framework移植-基于STM32F10x处理器》这本书的主题聚焦于将.NET Micro Framework(简称.NET MF)应用到STM32F10x系列微控制器上,这是一个涉及嵌入式系统开发、C#编程以及硬件平台集成的重要技术...

    Microsoft .NET Micro Framework 2.5 SDK

    微软的.NET Micro Framework(简称.NET MF)是一个专为嵌入式设备设计的轻量级.NET运行时环境,它允许开发者使用C#和.NET编程语言来构建和控制低功耗、资源受限的硬件系统。.NET Micro Framework 2.5 SDK是该框架的...

    .Net Micro Framework 移植说明文档

    .Net Micro Framework(.Net MF)是微软为小型设备设计的一个精简版的.NET框架。它不仅继承了.NET的硬件独立性,还提供了两个关键的抽象层:硬件抽象层(HAL)与平台抽象层(PAL),进一步隔离应用程序与硬件细节,...

    .net micro framework file

    .NET Micro Framework(简称.NET MF)是微软开发的一个轻量级.NET框架,主要针对嵌入式设备和物联网(IoT)应用。它提供了基础的.NET编程模型,使得开发者能够使用C#、VB.NET或其他.NET语言来编写高效能的嵌入式程序。...

    Expert .NET Micro Framework(德 Jens Kühner)

    11. **案例研究**:书中可能包含实际的项目案例,展示了.NET Micro Framework在不同应用场景中的应用,如智能家居设备或医疗设备。 通过阅读《Expert .NET Micro Framework》,开发者可以掌握在资源受限环境中使用...

    .NET Micro Framework Key文件部署说明

    .NET Micro Framework(.NET MF)是一种用于构建和运行小型嵌入式设备上的应用程序的框架。它为开发人员提供了类似于桌面版.NET Framework的功能,但针对资源有限的微控制器进行了优化。在使用.NET Micro Framework...

    GHI .NET Micro Framework培训教材(英文版)

    - **FEZ Family系列**:其中包括FEZ Domino、FEZ Mini和FEZ Cobra等设备,这些设备均支持.NET Micro Framework并提供了丰富的外设接口。 #### 五、组件驱动开发 - **数字输入输出**:介绍了如何使用.NET Micro ...

    .NET Micro Framework开发板使用手册(红牛开发板)

    总的来说,.NET Micro Framework为红牛开发板提供了强大的软件开发支持,让开发者可以利用熟悉的.NET编程模型来实现复杂的硬件控制。通过深入学习.NET MF的原理和API,以及熟练掌握开发工具的使用,你将能够充分发挥...

    .NET Micro Framework for Windows 7(X64) USB驱动安装说明

    .NET Micro Framework(简称.NET MF)是微软开发的一个嵌入式平台,主要面向资源有限的设备,如物联网(IoT)设备、智能家居控制器等。它提供了一个运行环境,使得开发者能够利用C#或VB.NET等高级语言进行编程,而无需...

    .NET Micro Framework Testing Batch File Generator

    .NET Micro Framework自动化测试工具,需.NET Micro Framework3.0和.NET Micro Framework Test Kit支持...

    expert .net micro framework

    expert .net micro frameworkexpert .net micro frameworkexpert .net micro framework

    Windows Embedded从入门到精通系列课程(18):.NET Micro Framework——用模拟器零成本体验MF开发

    在这个部分,我们专注于如何通过模拟器进行零成本的.NET Micro Framework开发,让你无需硬件就能开始实践。 **.NET Micro Framework概述** .NET Micro Framework(NETMF)是微软为小型、低功耗设备开发的一个操作...

    Apress - Expert .NET Micro Framework (Apr 2008)

    《精通.NET Micro Framework》是一本深入探讨.NET Micro Framework(以下简称.NET MF)的专业书籍,由Apress出版社于2008年4月发行。这本书详细介绍了这个小型化、资源优化的.NET框架,它专为嵌入式设备和物联网(IoT...

Global site tag (gtag.js) - Google Analytics