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 檔案結構圖