.Net Mirco Framework 2007技术大会
2006年在《程序员》杂志上通过看马宁的专栏文章,第一次知道了.Net MF。一年后的今天终于近距离地接触了.Net Mirco Frmaework,对MF有了一定的感性认识。
最近公司很多项目都有大量嵌入式设备使用,由于WinCE系统相对较大,对硬件平台要求过高,所以对.Net MF一直比较关注。今天总算大开眼界了。

微软公司的Colin Miller和Digi公司的John Leier在上午的演讲拉开了.Net MF序幕,针对嵌入式领域,一个从软件角度进行阐述,另一个从硬件平台角度进行呼应,一软一硬,二者强强联合,恐怕未来嵌入式智能设备一半以上的项目开发要被其收入囊中了。下午的中文演讲给人感觉有些干瘪,两三个演讲,平均短短十几分钟就草草收场。后来微软公司杜伟的演讲,从VS2005一行行难以看清的代码,到一个个令人惊艳的样例把MF开发技术推向最前台。

Digi公司很是有魄力,免费送出15套开发套件(5个作为回答问题的奖品,10个抽奖),自己即没有回答问题的勇气,也没有好的运气,只好剩下羡慕的份了。
最后为每个人送出的1G优盘(类似微软今年MVP大礼包中的优盘)很有分量,不仅是1G的容量,并且里面竟然把所有的幻灯片拷贝其中,更没有想到的是,MF 的SDK也在里面,真棒!
回到家迫不及待装了一份MF SDK(MicroFrameworkSDK.MSI 区区只有5998 kb,强!),有模拟器,也有示例。

其中几个示例不知道为什么编译成功,就是运行失败,对第二示例比较感兴趣,可以绘制图形,并且可以贴图。



相关代码如下:
//Copyright(C)MicrosoftCorporation.Allrightsreserved.
usingSystem;
usingSystem.Collections;
usingSystem.Threading;
usingMicrosoft.SPOT;
usingMicrosoft.SPOT.Input;
usingMicrosoft.SPOT.Hardware;
usingMicrosoft.SPOT.Presentation;
usingMicrosoft.SPOT.Presentation.Media;
usingMicrosoft.SPOT.Presentation.Controls;
usingMicrosoft.SPOT.Presentation.Shapes;
usingPresentationDemo;


/**///////////////////////////////////////////////////////////////////////////////


publicsealedclassMyApp:Application...{
//ThisstaticfieldpreventstheobjectfrombeingGC'd
privatestaticGpioButtonInputProviders_gpioInputProvider;
publicFontNinaBFont;
publicFontSmallFont;
publicBitmapSnowflake;

privateMyApp()...{
//InitializetheButtons/Pinsdispatcher
s_gpioInputProvider=newGpioButtonInputProvider(this.Dispatcher,null);
//Loadsomeresources
NinaBFont=Resources.GetFont(Resources.FontResources.NinaBFont);
SmallFont=Resources.GetFont(Resources.FontResources.SmallFont);
Snowflake=Resources.GetBitmap(Resources.BitmapResources.Snowflake);
}

protectedoverridevoidOnStartup(EventArgse)...{
//Createandsettheapplication'smainwindow
this.MainWindow=newMainMenuWindow(this);
base.OnStartup(e);
}

publicvoidGoHome()...{
Buttons.Focus(this.MainWindow);//Setfocusbacktothemainwindow
}

publicstaticvoidMain()...{
newMyApp().Run();//Starttheapp'smainwindow
}
}


/**///////////////////////////////////////////////////////////////////////////////

//Thisisthebaseclassofallourwindows;itmakeseverywindowvisible,
//setsthewindow'ssizetothefullsizeoftheLCD,andgivethewindowfocus
internalclassPresentationWindow:Window...{
protectedMyAppm_app;

protectedPresentationWindow(MyAppapp)...{
m_app=app;
//MakethewindowvisibleandthesizeoftheLCD
this.Visibility=Visibility.Visible;
this.Width=SystemMetrics.ScreenWidth;
this.Height=SystemMetrics.ScreenHeight;
Buttons.Focus(this);//Setfocustothiswindow
}

protectedoverridevoidOnButtonDown(ButtonEventArgse)...{
//RemovethiswindowformtheWindowManager
this.Close();
//Whenanybuttonispressed,gobacktotheHomepage
m_app.GoHome();
}
}

/**///////////////////////////////////////////////////////////////////////////////


internalsealedclassMainMenuWindow:PresentationWindow...{
privateListBoxm_listbox;

publicListBoxMainListBox...{get...{returnm_listbox;}}
publicMainMenuWindow(MyAppapp)
:base(app)...{
ColorinstructionTextColor=ColorUtility.ColorFromRGB(192,192,192);
ColorbackgroundColor=ColorUtility.ColorFromRGB(26,118,183);
ColorunselectedItemColor=ColorUtility.ColorFromRGB(192,192,255);//Unselectedlistboxitemcolor
ColorselectedItemColor=Colors.White;//Selectedlistboxitemcolor
//TheMainwindowcontainsaveritcalStackPanel
StackPanelpanel=newStackPanel(Orientation.Vertical);
this.Child=panel;
//Thetopchildcontainstextwithinstructions
TextFlowtextflow=newTextFlow();
textflow.TextAlignment=TextAlignment.Center;
textflow.Visibility=Visibility.Visible;
textflow.TextRuns.Add(
newTextRun(Resources.GetString(Resources.StringResources.SelectAnItemFromBelow),
app.NinaBFont,instructionTextColor));
panel.Children.Add(textflow);
//Addablanklinetothestack
panel.Children.Add(textflow=newTextFlow());
textflow.TextRuns.Add("",app.NinaBFont,instructionTextColor);
textflow.Visibility=Visibility.Visible;
//Thenextchildcontainsalistboxwithoptions
m_listbox=newListBox();
//Preparethelistbox
Buttons.Focus(m_listbox);
panel.Children.Add(m_listbox);
this.Background=m_listbox.Background=newSolidColorBrush(backgroundColor);

m_listbox.SelectionChanged+=delegate(Objectsender,SelectionChangedEventArgse)...{
Int32previousSelectedIndex=e.PreviousSelectedIndex;
if(previousSelectedIndex!=-1)...{//Iftherewasapreviousindex
//Changepreviously-selectedlistboxitemcolortounselectedcolor
((Text)m_listbox.Items[previousSelectedIndex].Child).ForeColor=unselectedItemColor;
}
//Changenewly-selectedlistboxitemcolortoselectedcolor
((Text)m_listbox.Items[e.SelectedIndex].Child).ForeColor=selectedItemColor;
};
//Addtheitemstothelistbox
foreach(StringsinnewString[]...{"VerticalStack","HorizontalStack","Canvas","Diagonal"})...{
Texttext=newText(m_app.NinaBFont,s+"PanelDemo");
text.ForeColor=unselectedItemColor;
text.TextAlignment=TextAlignment.Center;
text.Width=this.Width;
ListBoxItemlbi=newListBoxItem();
lbi.Background=m_listbox.Background;
lbi.Child=text;
m_listbox.Items.Add(lbi);
}
m_listbox.SelectedIndex=0;
//Addablanklineinthestack
panel.Children.Add(textflow=newTextFlow());
textflow.TextRuns.Add("",app.NinaBFont,instructionTextColor);
textflow.Visibility=Visibility.Visible;
//Thebottomchildcontainstextwithreturninstructions
textflow=newTextFlow();
textflow.TextAlignment=TextAlignment.Center;
textflow.Visibility=Visibility.Visible;
textflow.TextRuns.Add(
newTextRun("(AfterviewingaPanelDemo,hitEntertoreturntothisscreen)",
app.NinaBFont,instructionTextColor));
panel.Children.Add(textflow);
}

protectedoverridevoidOnButtonDown(ButtonEventArgse)...{
//If<Enter>buttonispressed,gointotheselecteddemo
if(e.Button==Button.Select)...{
switch(MainListBox.SelectedIndex)...{
case0://VerticalStackPanelDemo
newStackPanelDemo(m_app,Orientation.Vertical);
break;
case1://HorizontalStackPanelDemo
newStackPanelDemo(m_app,Orientation.Horizontal);
break;
case2://CanvasPanelDemo
newCanvasPanelDemo(m_app);
break;
case3://DiagonalPanelDemo
newDiagonalPanelDemo(m_app);
break;
}
}
//Don'tcallbaseimplementation(base.OnButtonDown)orwe'llgobackHome
}

protectedoverridevoidOnGotFocus(FocusChangedEventArgse)...{
//Wheneverthiswindowgetsfocus,itgivesittoitslistbox
Buttons.Focus(m_listbox);
base.OnGotFocus(e);
}
}


/**///////////////////////////////////////////////////////////////////////////////


internalsealedclassStackPanelDemo:PresentationWindow...{
//ThisclassshowshowtobuildyourownshapedrawinginaDraw
本文回顾了参加2007年.NET MicroFramework技术大会的经历,介绍了.NET MicroFramework在嵌入式领域的应用前景,并分享了使用.NET MicroFramework SDK进行开发的经验及遇到的问题。
174

被折叠的 条评论
为什么被折叠?



