程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 魅族M8 SDK開發初體驗

魅族M8 SDK開發初體驗

編輯:關於.NET

魅族在經歷了兩年多的開發後,M8終於上市了。能夠被稱為iPhone Killer,說明了M8有自身的優勢。 之前也有朋友問過我,會買一款M8試試嗎?我說,不會,除非M8出SDK。今天是個可能破財的日子,因為 M8真的出SDK了……

安裝

魅族M8用的是Windows CE的操作系統,所以配置開發環境並不是很難,以前有過Windows Mobile開發 經驗的人,配置起來不會太難。開發工具使用的是Visual Studio 2005 SP1,需要安裝M8的SDK。

SDK下載地址:

http://www.meizu.com/service/downs.html?id=97

官方開發環境配置文檔:

http://www.meizu.com/help/sdk.html

因為官方文檔對於開發環境配置介紹得非常仔細,所以,我們在這裡就不多廢話了。直接進入開發環 境。需要注意的是:如果想用到M8界面庫的方法,是一定要將LIB文件引入到工程中的。

創建工程

M8創建工程的方式與Windows Mobile也是極其類似的。在 Visual Studio 2005的主菜單中選擇File- New – Project. 在對話框中選擇“Visual C++” – “Smart Device”中的“Win32 Smart Device Project”,填寫工程名稱,選擇OK。

Welcome界面,不多說了。

選擇開發平台,安裝了魅族M8的SDK後,會在列表中出現M8SDK。選中該項,點擊中間的>按鈕,將 M8SDK添加到“Selected SDKs”中。

最後選擇應用程序類型,選擇“Windows application”,按Finish即可。

進入開發主界面後,就和Windows Mobile開發不一樣了。我們要先編譯一個Sample code

C++開發

魅族M8的開發,與普通WINCE程序開發最大的不同在於魅族使用了自己的UI類庫。這套類庫給人的第一 印象是,接口簡潔,小巧可愛,至少比丑陋的MFC是好多了。細看之下,還是有一些不盡人意的地方,或 者說設計時欠考慮。不過,考慮到魅族是家手機廠商,而不是軟件公司,設計成這樣,已經非常厲害了。 必須承認,魅族有高人在。寫到這裡,忽然有點羨慕魅族的開發人員和架構師,能夠白手起家創建一套自 己的類庫,這不但需要技術,還需要際遇。這麼多開發人員,又有幾個人有機會從頭設計一個類庫呢?

不知道魅族對於這套類庫的未來是怎麼想的,在我看來,開源也許是一個不錯的選擇,國內非常缺能 夠應用於嵌入式系統的輕量級UI類庫,QT、MiniGUI大都源自類UNIX、Linux系統,對於Windows程序員來 說學習曲線還是比較陡。如果魅族能夠開源,或者以某種授權開放這套類庫,一則可以解決後續開發乏力 的問題,二則可以讓這套類庫平滑地移植到其他系統上。當然,這條路也是困難重重,需要仔細思量。

先來說說第一個程序吧,示例程序可以從M8 SDK目錄的幫助文件中找到,安裝路徑在:C:\Program Files\Windows CE Tools\wce600\M8SDK\Samples

在Meizu M8 MZFC Documentation (CHS).chm文件裡,包含示例代碼。我選取了Hello MZFC的示例代碼 ,將其拷貝到我創建工程的M8Test.cpp中(該文件名因為工程名不同而不同),替換掉所有的代碼。

在cpp文件的第一行要加上:

#include "stdafx.h"

然後編譯運行,按F5,就可以在模擬器上看到下面的界面了:

需要提醒的是,必須要按照官方文檔,在工程裡增加相關的LIB文件,編譯才可以成功通過。

看了看代碼,沒找到WinMain函數,消息循環也被封裝在類庫中,MZFC走的是MFC的路子,從名字上也 能看出這種傳承關系。運行人家的代碼沒意思,還是要自己寫點代碼才行的。好在代碼不難理解,很快就 能上手寫點東西。

首先要聲明一個Button,叫做MZ_IDC_HELLOBTN。代碼如下:

#define MZ_IDC_TESTBTN1 101
#define MZ_IDC_HELLOBTN 102
// Main window derived from CMzWndEx
class CSample1MainWnd: public CMzWndEx
{
MZ_DECLARE_DYNAMIC(CSample1MainWnd);
public:
// A button control in the window
UiButton m_btn;
UiButton m_btnHello;

}

然後在OnInitDialog函數中,增加:

m_btnHello.SetButtonType(MZC_BUTTON_ORANGE);
m_btnHello.SetPos(100,350,280,100);
m_btnHello.SetID(MZ_IDC_HELLOBTN);
m_btnHello.SetText(_T("Hello wolf!"));
m_btnHello.SetTextColor(RGB(255,255,255));
// Add the control into the window.
AddUiWin(&m_btnHello);

這個寫法就類似於.NET的風格了,不過需要聒噪幾句:ButtonType裡既包含顏色,也包含特定用途信 息(MZC_BUTTON_DOWNLOAD),不方便未來的擴展,而且用戶無法自定義顏色值。這個設計不可取。

下面是處理Button的點擊事件:

// override the MZFC command handler
virtual void OnMzCommand(WPARAM wParam, LPARAM lParam)
{
UINT_PTR id = LOWORD(wParam);
switch(id)
{
case MZ_IDC_TESTBTN1:
{
if(1 == MzMessageBoxEx(m_hWnd, L"You have pressed Exit button, Really want exit?", L"Exit", MB_YESNO, false))
PostQuitMessage(0);
}
break;
case MZ_IDC_HELLOBTN:
{
MzMessageBoxEx(m_hWnd,_T("Hello wolf!"),_T("wolf"),MB_OK,false);
}
break;
}
}
};

中規中矩的處理方式,與Win32程序類似。不過簡化了子窗體的概念,將所有控件的ID都放在wParam參 數中。如果將來需要擴展Button 的處理事件時,這種架構就比較麻煩了。比如,處理拖拽事件時,動作 要通過lParam參數傳進來嗎?或者,這個OnMzCommand方法只處理Command。

MzMessageBoxEx函數和MessageBox API一模一樣,需要說一句的是,在Sample Code裡用的都是L”” ,表示Unicode。在CE的編程規范裡,這種地方應該用_T(“”)的宏來替代。小問題。

好了,寫完這些之後,我們F5一下:

.NET CF開發

如果不使用魅族的MZFC類庫,直接創建一個Win32 Application的工程,也能夠在模擬器上運行起來, 能看到一個傳統的空白窗口。這個我就不在這裡展示了。不過這個小插曲給了我一個提示,既然Win32 Application能運行,那麼.NET Compact Framework呢?

魅族M8是基於WINCE 6.0的。但是,在Visual Studio 2005的C#工程裡,沒有Windows CE 6.0的模板。 所以,我們選擇Visual C# - Smart Device – Windows CE 5.0節點,裡的Device Application,然後為 工程指定個名字。

進入IDE主界面,我們修改一下窗體的Size,然後在工具欄的Device選擇框裡,選擇部署到“M8SDK Emulator”中。然後在窗體中加入一個Button。

再寫個“Hello,wolf”的話,就太沒品了。所以,我在Button_Click裡寫了:

private void button1_Click(object sender, EventArgs e)
{
string str = string.Format(
"OS Version : {0}, .NET CF Version : {1}",
Environment.OSVersion.ToString(),
Environment.Version.ToString());
MessageBox.Show(str);
}

獲取操作系統的版本信息和.NET CF CLR的版本信息。寫完後,F5,第一次運行時,因為 要部署.NET CF運行時,時間可能會長一些,少安毋躁。

正義終將戰勝邪惡,M8終將戰勝iPhone,.NET CF終將運行在M8上……

最後,我們證明魅族M8是運行在Windows CE 6.0上的,.NET CF版本是2.0。盡管界面丑一點。但是這 說明,很多.NET CF程序改改界面就可以運行在M8上了。

最後小抱怨一下,M8的分辨率實在太大了,我們這種還沒脫貧,一直用小顯示屏的程序員,要想看清 M8模擬器的全部,就得把它橫過來。所以,寫這篇文章的時候,我一直是歪頭調試程序的。這是魅族在幫 我們治頸椎嗎?

總結

總體來說,配置M8的開發環境難度並不大,關鍵是M8采用了不同於傳統Win32 API的界面庫,所以UI方 面的開發還要重新學習。不過有膽量開發自己的控件庫,這一點就值得佩服。

魅族充分利用了微軟開發者的Ecosystem,如果說魅族是站在微軟的肩上,這句話不為過。不過魅族解 決了一些別人沒有解決的問題,比如用戶界面的問題,可見采用什麼技術不重要,關鍵是要有一顆傾聽客 戶需求的心。建立自己的標准,讓別人跟著我的標准一起玩,這才是魅族想做的事情。

大家都在說魅族M8在學iPhone,如果說界面只是形似,那麼現在魅族也逐漸開始神似了。想想iPhone 的發展軌跡,在魅族亦步亦趨地有了SDK後,下一步會有什麼呢?

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved