Do everything if needed

Only to note everything I meet.

Metro开发小记

   隨着Windows Mobile的没落,WINCE市场也很快萎缩,使得我这样的老牌WINCE程序员也日暮西山,几近无处解决一日三餐。好在天无绝人之路,终于有机会做Win8 Metro界面的开发。现将开过过程中遇到的问题、体会心得一并记录,以便日后查询及供初学者参照。

         Metro的一些基本概念在这就不再赘述,作为一名工程师我喜欢直接开始写代码而不是来一大堆无关的理论。MSDN中有这方面的入门帖,可以先他细读一下,并将其中的例子抄写并调试,以加强印象。例子可以参见如下网页及其相关的网页:

http://msdn.microsoft.com/en-us/library/windows/apps/hh465045.aspx

 

Metro的开发过程与WIN32的界面开发过程有许多相同之处。归根结蒂它也没有摆脱WIN32中窗口的概念,我觉得可以理解为Metro中的XAML相当于WIN32中的资源文件,只是这种资源文件比RC文件功能更为强大。微软本身也对Metro程序做了很多限制,所以使用Metro开发界面很快,做出来的效果也很好,但同时做某些事情时也很费劲(例如直接操作某个驱动),而某些事情可能压根就做不了。

以下就列举一些有别于WIN32之处:

1,  绘图

相信用过WIN32界面开发的人都对Line,LineTo等函数不会陌生,但在Metro中,这些函数无法使用,我们需要将要绘图的窗口设置成Canvas,再不断的生成Line对象,将其Append到要绘制的窗口中。代码如下:

 

XAML:

<Border BorderBrush="Black" BorderThickness="1" Height="200" Width="400" >

     <Canvas x:Name="CPUInfo"/>

    </Border>

 

C++:

 

其中CPUInfo即要绘图的Canvas类型的窗口:

           //Line must be created evey times, otherwise, the olde line will disappear.

           line = ref new Windows::UI::Xaml::Shapes::Line( );

           line->Stroke =  m_pLineBrush;

           line->StrokeThickness = 1;

 

           line->X1=lastPoint.X;

           line->Y1=lastPoint.Y;

 

           line->X2=lastPoint.X+1;

           line->Y2=y;

 

           CPUInfo->Children->Append( line );

 

 

以下记录一些常用控件的用法:

1)ToggleButton

 给ToggleButton中的IsChecked元素赋值(true,false)就可以改变其Checked状态,但读值要使用IsCheck中的Value元素,因IsCheck也是一个Class.

 2)当大于一个Button的Click事件共用一个函数时的处理方法:

以ToggleButton为例,将sender转化成ToggleButton类型,然后就可以和XAML文件中声名的各个Button直接比较,以确定是哪个Button引发的事件。

从而避免写了N多消息处理函数的现象,可以使代码整洁一些。
void MainPage::OnButtoClicked(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
 ToggleButton ^ pSender  = ( ToggleButton ^)sender;

 if( PowerButton== pSender )
 {

 }else

{

}

}

posted on 2012-03-16 11:39  microsun  阅读(5615)  评论(0编辑  收藏  举报

导航