using System;
using System.Drawing;
using System.Threading;
using System.Windows.Forms;
using Microsoft.SPOT.Emulator;
using Microsoft.SPOT.Hardware;
using System.Drawing.Drawing2D;
namespace Microsoft.SPOT.Emulator.Sample
{
/// <summary>
/// This is the UI for the LCD sample
/// </summary>
public partial class SampleEmulatorForm : Form
{
Emulator _emulator;
//叶帆添加
Gpio.GpioPort[] _port=new Microsoft.SPOT.Emulator.Gpio.GpioPort[5];
delegate void PortWriteDelegate(bool fState);
int intIndex = 0;
bool[] _pressed = new bool[] {false,false,false,false,false };
public SampleEmulatorForm(Emulator emulator)
{
_emulator = emulator;
// Initializing the component on the UI form
InitializeComponent();
}
protected override void OnLoad(EventArgs e)
{
//Give the buttonCollection focus to allow it to handle keyboard events
//this.buttonCollection.Select();
base.OnLoad(e);
}
public void OnInitializeComponent()
{
//initialize the lcd control with the lcd emulator component
this.lcdDisplay.LcdDisplay = _emulator.LcdDisplay;
//叶帆添加
_port[0] = _emulator.FindComponentById("Pin_Select") as Gpio.GpioPort;
_port[1] = _emulator.FindComponentById("Pin_Up") as Gpio.GpioPort;
_port[2] = _emulator.FindComponentById("Pin_Left") as Gpio.GpioPort;
_port[3] = _emulator.FindComponentById("Pin_Down") as Gpio.GpioPort;
_port[4] = _emulator.FindComponentById("Pin_Right") as Gpio.GpioPort;
}
//按下叶帆添加
private void picKey_MouseDown(object sender, MouseEventArgs e)
{
//OK
Rectangle rect = new Rectangle(31, 40, 70, 50);
intIndex = 0;
if (rect.Contains(e.X, e.Y))
{
intIndex = 0;
}
//UP
GraphicsPath path = new GraphicsPath();
path.AddPolygon(new Point[] {new Point(0,0),new Point(129,0),new Point(100,40),new Point(30,40) });
if (path.IsVisible(e.X, e.Y))
{
intIndex = 1;
}
//LEFT
path.Reset();
path.AddPolygon(new Point[] { new Point(0, 0), new Point(0, 130), new Point(31, 90), new Point(31, 40) });
if (path.IsVisible(e.X, e.Y))
{
intIndex = 2;
}
//DOWN
path.Reset();
path.AddPolygon(new Point[] { new Point(0, 130), new Point(129, 130), new Point(100, 90), new Point(30, 90) });
if (path.IsVisible(e.X, e.Y))
{
intIndex = 3;
}
//RIGHT
path.Reset();
path.AddPolygon(new Point[] { new Point(129, 0), new Point(129, 130), new Point(100, 90), new Point(100, 40) });
if (path.IsVisible(e.X, e.Y))
{
intIndex = 4;
}
picKey.BackgroundImage = imgKey.Images[intIndex+1];
OnButtonStateChanged(intIndex, true);
}
//弹起叶帆添加
private void picKey_MouseUp(object sender, MouseEventArgs e)
{
picKey.BackgroundImage = imgKey.Images[0];
OnButtonStateChanged(intIndex, false);
}
//按下(无法捕捉方向键)
private void SampleEmulatorForm_KeyDown(object sender, KeyEventArgs e)
{
}
//抬起
private void SampleEmulatorForm_KeyUp(object sender, KeyEventArgs e)
{
picKey.BackgroundImage = imgKey.Images[0];
OnButtonStateChanged(intIndex, false);
}
//捕捉方向键
protected override bool ProcessDialogKey(Keys keyData)
{
switch (keyData)
{
case Keys.Enter:
intIndex = 0;
break;
case Keys.Up:
intIndex = 1;
break;
case Keys.Left:
intIndex = 2;
break;
case Keys.Down:
intIndex = 3;
break;
case Keys.Right:
intIndex = 4;
break;
}
picKey.BackgroundImage = imgKey.Images[intIndex + 1];
OnButtonStateChanged(intIndex, true);
return base.ProcessDialogKey(keyData);
}
//按键状态改变
private void OnButtonStateChanged(int index,bool pressed)
{
if (_port[index] != null)
{
if (_pressed[index] != pressed)
{
_pressed[index] = pressed;
bool val = false;
switch (_port[index].Resistor)
{
case Microsoft.SPOT.Emulator.Gpio.GpioResistorMode.Disabled:
case Microsoft.SPOT.Emulator.Gpio.GpioResistorMode.PullUp:
val = pressed;
break;
case Microsoft.SPOT.Emulator.Gpio.GpioResistorMode.PullDown:
val = !pressed;
break;
}
//Marshal to MicroFramework thread.
//No need to wait for a response. Just post the message
_port[index].BeginInvoke(new PortWriteDelegate(_port[index].Write), !val);
}
}
}
}
}
在下面的网站上,我们还可以下载最新的.Net Micro Framework示例程序,其中“NewPresentation”程序比“Presentation”已高了一个层次,如下图:
(图:MF071030002.jpg)
此外这个温度显示的示例程序也不错,我们可以用上下按钮修改温度值,如下图。
(图:MF071030003.jpg)
新示例下载链接: http://msdn2.microsoft.com/en-us/embedded/bb267253.aspx
不过总体来说,示例程序还是很简陋的,有时间我自己做一个最炫的(当然网友有做得更好的,别忘了与我分享)。
附录:经典.Net Micro Framework应用欣赏
(图:MF071030005.jpg)
我做的模拟器外壳,就是从上图“偷”来的J,不过按钮单击效果倒是费了我不少周折。
想想看,用.Net Micro Framework开发MP3/MP4,电子词典该是多么容易和简单,并且效果一定很炫。(上网查了查 Digi核心小模块要$199,几千两银子呢,介入的厂商越多,相信硬件平台一定会越来越便宜的)。
下面是我开发的模拟器下载地址,有兴趣的朋友可以试一试
http://download.csdn.net/source/274337
相关推荐
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 ...
《玩转.NET Micro Framework移植-基于STM32F10x处理器》源程序
这是我自己改造的.Net Micro Framework模拟器,比windows自带的漂亮多了。 覆盖该目录下的同名文件(路径以实际开发包安装位置为准)即可。 C:\Program Files\Microsoft .NET Micro Framework\v2.0.3036\Tools 支持...
.NET Micro Framework 电子书
注:比上一个模拟器多了支持方向键控制 这是我自己改造的.Net Micro Framework模拟器,比windows自带的漂亮多了。 覆盖该目录下的同名文件(路径以实际开发包安装位置为准)即可。 C:\Program Files\...
.net micro framework关于文件操作的例子,非常详细。还包括了点击等东西
expert .net micro frameworkexpert .net micro frameworkexpert .net micro framework
.NET Micro Framework自动化测试工具,需.NET Micro Framework3.0和.NET Micro Framework Test Kit支持...
Microsoft .NET Micro Framework 2.5 SDK。 这个我暂时没用,权当放在这里存放,需要的,自己动手。
近来有些刚入门的用户,不太了解.NET Micro Framework开发板的使用,所以写了这篇文档,以期缩短用户对开发板的熟悉时间。
micro framework 4.0 SDK,最新开发工具包
.NET Micro Framework 电子书
http://item.taobao.com/item.htm?id=7117999726 .NET Micro Framework开发板的Key文件的部署说明。
目前针对.NET Micro Framework无论是开发GPIO、SPI、I2C,还是串口通信都离丌开硬件,前段时间我扩展了宏方的MF模拟器,可以丌用硬件,零成本的体验上述技术开发。
.NET Micro Framework开发板原理图(红牛开发板)
.NET Micro Framework开发板使用手册(红牛开发板)
如何顺利编译.Net Micro Framework Porting Kit 4.1 安装路径不能有空格
《玩转.NET Micro Framework 移植-基于STM32F10x处理器》一书所有的源代码。其它更多的资源可以访问我的blog:http://blog.csdn.net/norains 谢谢!
.NET Micro Framework for Windows 7(X64) USB驱动安装说明,包含相应的驱动程序