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

{

}

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM