• 沒有找到結果。

5.5 多媒體名片播放器(MBC Player)

5.5.1 Windows Mobile 應用程式設計概念

首先我們要了解 Windows Mobile 應用程式的處理流程,這種處理流程我們稱之為 Windows Procedure,Windows procedure 決定視窗的行為,所有的訊息(Windows Message)都會交給 Window procedure 處理,訊息的內容值是 windows 定義好的,

如 WM_CREATE 和 WM_MOVE,高達上百種,定義在 WinUser.h 中。Windows Mobile 作業系統會監督電腦所有的輸入裝置,包括鍵盤、滑鼠、觸控螢幕、以及其他 會引發中斷的硬體。然後 Windows 會把 Event 包成 Message 丟到擁有該視窗的應用 程式訊息佇列(message queue),最後再由應用程式取出處理。接下來我們介紹一 些本研究使用到的重要的應用程式介面(API)或函式(Function)。

---

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) {

MSG msg;

// Perform application initialization:

if (!InitInstance(hInstance, nCmdShow)) {

return FALSE;

}

HACCEL hAccelTable;

hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_TEMPLATE));

// Main message loop:

while (GetMessage(&msg, NULL, 0, 0)) {

if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) {

TranslateMessage(&msg);

DispatchMessage(&msg);

} }

//return (int) msg.wParam;

return TermInstance (hInstance, msg.wParam);

}

---

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)

1. hInstance:APP 的代碼(ID)

2. hPrevInstance:Windows 3.0 & 3.1 的 ID,現在均為 NULL。

3. lpCmdLine:指向傳給 APP 的命令列字串(Unicode in Win CE)。

4. nCmdShow:App 視窗顯示狀態

GetMessage():負責從應用程式的訊息佇列(Message Queue)取出送給應用程式 的訊息(Message),如果沒有 message,會使得應用程式停止執行。

TranslateMessage():轉換是當的鍵盤訊息成一個描述訊息。

DispatchMessage():指派訊息給適當的視窗程式。這個 Message 迴圈會一直執行,

直到所取出的 Message 是 WM_QUIT 才會結束。

TermInstance ():處理程式結束時的相關事項,如釋放記憶體(Free memory)。

---

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {

return DefWindowProc (hWnd, message, wParam, lParam);

}

const struct decodeUINT MainMessages[] = {

WM_SETTINGCHANGE,DoSettingChangeMain,

};

WndProc Callback 函式處理所有的 WM_ Message。WM_ Message 會由相對應的 DoxxxMain function 處理。

case WM_COMMAND:

Winodws 會監控所有的裝置,任何 User Event 會傳送這個 message 到你的 callback function。

case WM_CREATE:

當 Winodws create 之後,callback function 會收到這個 Message。

case WM_PAINT:

在 UpdateWindow(hWnd)之後 callback function 會接收到這個訊息,使用者也可 以再此時進行畫面呈現,如 Drewtext。

case WM_DESTROY:

當使用者關閉視窗之後,Callback function 會收到這個訊息,此時要處理一些結束視 窗的函式。

設計依照第 4.2.5 節所描述之架構,分成七個模組進行。

5.5.2 使用者事件處理模組

如圖 49 所示,使用者事件處理模組就是 DoCommandMain 函式,處理六種使用 者輸入事件,用 switch case 機制來判斷這些事件並呼叫對應處理的模組,說明如下:

1. DownloadButtonClick:處理使用者點選下載多媒體名片按鈕,呼叫下載模 組進行下載。

2. LoadButtonClick:處理使用者點選選取名片按鈕,呼叫資料處理模組進行讀 取。

3. PlayerButtonClick:處理使用者點選播放名片按鈕,呼叫顯示模組進行播放。

4. CreateButtonClick:處理使用者點選製作名片按鈕,呼叫製作 MBC 模組進 行製作。

5. CallButtonClick:處理使用者點選撥打電話按鈕,呼叫撥打電話模組進行電 話撥打。

6. SIMButtonClick:處理使用者點選轉存按鈕,呼叫轉存模組進行轉存到 SIM 的功能。

5.5.3 資料處理模組

如圖 50 所示,資料處理模組提供一種檔案總管選單提供使用者選取多媒體名片的 資料檔.sy,.sy 檔案中記錄本行動電話裝置所有的名片,使用者點選後會到各別目錄去 解析名片資料,並透過顯示於名片列表中,名片列表為一個 ListBox,顯示方式為顯示 該多媒體名片人名的名片,如王大明的名片。

圖 50 sy 檔案結構圖

相關文件