成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Symbian學習筆記(3)——應用程序框架

系統
開發symbian的GUI應用是有模板的,用Carbide C++的工程向導可以自動生成程序的基本框架。不過可能與安裝的SDK版本有關,我現在只能生成一個AppUi一個Container的常規模板(以前用2nd FP3時還可以生成多個view多個container的視圖模板)。
開發symbian的GUI應用是有模板的,用Carbide C++的工程向導可以自動生成程序的基本框架。不過可能與安裝的SDK版本有關,我現在只能生成一個AppUi一個Container的常規模板(以前用2nd FP3時還可以生成多個view多個container的視圖模板)。

  不管是哪一種模板,它們共同的部分是入口函數、Application和Document。即以下三個文件是所有工程都具有的:

  1)有一個與工程同名的cpp文件,它只提供了兩個全局函數,是程序執行的入口,負責創造Application。這個文件我們不用管它。

  2)有一個以工程名+Application命名的類,派生于CAknApplication,它負責創建文檔類并提供應用的UID。一般情況下它也不需要我們操心,但是因為它提供了一個函數OpenIniFileLC,如果我們需要在啟動程序時加載ini文件中的配置,可以重載它。

  3)有一個以工程名+Document命名的類,派生于CAknDocument,它負責創建Ui類,同樣一般情況我們不管它,但是它也提供了一個函數OpenFileL,如果需要加載普通文件,也可以重載它。

  下面來看看兩種模板的不同點吧。

  一. 基于CCoeControl的常規模式

  這種模式的特點是一個AppUi類并且對應一個Container類。

  它在上述三個文件以外,還有下面兩個文件:

  4)有一個以工程名+AppUi命名的類,派生于CAknAppUi,它主要的工作是負責用戶接口(所謂的UI)并且創建Container類,所以它是我們關注的重點之一。

  它最重要的成員函數是HandleCommandL,這個函數來自于CEikAppUi類,負責處理各種命名/事件。

  有兩個函數DynInitMenuBarL和DynInitMenuPaneL,如果需要動態更改菜單的項目,可以重載它們。

  HandleKeyEventL函數則可以在需要自己處理鍵盤事件時重載一下。

  此外,這個AppUi還提供一些比較常用的函數,比如:

  Document() 可以獲取Document對象指針。

  Application() 可以獲取Application對象指針。

  StatusPane() 可以獲取狀態欄的指針。

  Cba() 可以獲取控制欄的指針。

  5)有一個以工程名+Container命名的類,派生于CCoeControl,它負責內容的展示,也是我們關注的重點。

  如果需要在界面上增加控件類類的東西,都是在這個類中實現,總的來說,它負責所有與界面展示相關的東西。

  它有一個Draw函數,但是如果我們是通過控件來展示信息,則這個函數里的代碼似乎與我們關系不大,除非我們的界面完全是靠畫出來的。

  另兩個函數ComponentControl和CountComponentControls分別獲取控件與獲取控件個數,在依賴于控件展示的GUI應用中則更為重要。

  因為它實現了接口MCoeControlObserver,所以函數HandleControlEventL也需要實現一下。

  利用它的成員iCoeEnv可以取到AppUi類的指針,不過需要強制轉型一下,如:STATIC_CAST(CiMusicAppUi*,iCoeEnv->AppUi())->...

  二. 基于CAknView的MVC模式

  這種模式的特點是在AppUi類與Container類之間增加一個AppView的類,即一個AppUi對象,N個AppView和N個Container。

  除了公共的三個文件以外,它包括的文件有:

  4) 有一個以工程名+AppUi命名的類,派生于CAknViewAppUi類,其實也是間接派生于CAknAppUi類,它的工作職責與常規模式中的AppUi類也基本相同。

  ***的區別在于它不是直接創建Container類,而是創建AppView類,并且是創建多個AppView類。同時它還需要負責將創建的view加入視圖棧里AddViewL。

 

    CiMusicViewMusic* view1 = new (ELeave) CiMusicViewMusic;   
    CleanupStack::PushL( view1 );
    view1->ConstructL();
    AddViewL( view1 );      // transfer ownership to CAknViewAppUi
    CleanupStack::Pop();    // view1
   
    CiMusicViewFavt* view2 = new (ELeave) CiMusicViewFavt;   
    CleanupStack::PushL( view2 );
    view2->ConstructL();
    AddViewL( view2 );      // transfer ownership to CAknViewAppUi
    CleanupStack::Pop();    // view2
   
    CiMusicViewWeb* view3 = new (ELeave) CiMusicViewWeb;   
    CleanupStack::PushL( view3 );
    view3->ConstructL();
    AddViewL( view3 );      // transfer ownership to CAknViewAppUi
    CleanupStack::Pop();    // view3
   
    this->ActivateLocalViewL(KViewMusicId);

  5)有多個以工程名+View命名的類,派生于CAknView類。它負責分擔AppUi部分事件的處理,所以,它也有HandleCommandL函數。

  此外,它的DoActivateL和DoDeactivate兩個函數在當前視圖激活或失活時被調用,需要重載一下。

  在激活時,需要創建視圖對應的Container類,并且調用Container的SetMopParent為自己,還要在上層的AppUi中將這個Container加入棧中。一般代碼如下:

 

    iContainer = new (ELeave) CiMusicContainerFavt;
    iContainer->SetMopParent(this);      
    iContainer->ConstructL( AppUi()->ApplicationRect() );
    iContainer->listType=type;
    AppUi()->AddToStackL( *this, iContainer );
 

  注意,它的AppUi()可以得到它的上層的AppUi對象指針。

  失活時則正好相反,需要  

if ( iContainer )
...{
AppUi()->RemoveFromViewStack( *this, iContainer );
}
delete iContainer;
iContainer = NULL;

  6)有多個以工程名+Container命名的類,派生于CCoeControl并實現接口MCoeControlObserver,所以它的行為與常規模式中的Container類似。

  這種模式可以有效地組織應用程序,根據應用的多個功能界面切割成數個模塊(視圖)。由多個AppView來分擔AppUi中的事件處理,負責自己這個視圖下的具體行為與顯示。

  各個視圖之間的切換也很簡單:

  STATIC_CAST(CiMusicAppUi*,iCoeEnv->AppUi())->ActivateLocalViewL(KViewMusicId);

  [補充]

  三 比較兩種模式

  有些教材還提出過對話框模式,但是我覺得那似乎不太實用,也沒注意過它的結構組成。

  對比上述兩種架構模板,很顯然,第二種基于視圖的模板應該更有實用性一點,除非程序實在簡單。

  不過,這里的“視圖”很容易讓人產生誤解。一般我們說MVC的時候,模型-視圖-控制器,但是這里的AppView其實對應的控制器,而Container對應的則是視圖。

  所以在新的SDK里,***種模板中由向導生成的工程中源于CCoeControl的類名改成了AppView,對應繼承于CAknAppUi控制器的類名叫AppUi。因為我沒有看到多視圖的工程生成的代碼,如果這樣的話,估計也應該對應的改一下吧。

【編輯推薦】

  1. Symbian每6個月發布一款新開源操作系統
  2. 微軟建WindowsMarketplace 完善智能機平臺
  3. 大力模仿Android 傳微軟WM6.5可裝插件
責任編輯:龐桂玉 來源: it168
相關推薦

2011-05-03 09:14:45

QtOvi商店Symbian

2009-07-14 18:10:38

Swing應用程序框架

2009-04-12 08:59:05

Symbian諾基亞移動OS

2009-04-12 09:00:08

Symbian諾基亞移動OS

2009-04-12 09:01:05

Symbian諾基亞移動OS

2009-04-12 09:02:32

Symbian諾基亞移動OS

2009-04-12 09:06:00

Symbian諾基亞移動OS

2009-04-12 09:03:50

Symbian諾基亞移動OS

2009-04-12 08:57:50

Symbian諾基亞移動OS

2010-08-10 15:26:38

Flex應用程序

2021-02-05 11:55:37

PythonWindows平臺代碼

2020-10-22 10:05:26

HarmonyOS應用程序框架

2009-04-12 09:25:12

Symbian諾基亞移動OS

2020-11-05 11:47:52

HarmonyOS

2009-04-12 08:55:18

Symbian諾基亞移動OS

2009-04-12 08:46:43

Symbian諾基亞移動OS

2009-04-12 08:36:09

Symbian諾基亞移動OS

2010-08-11 13:08:36

Flex3

2009-09-10 10:55:31

中國移動應用程序商店

2010-05-23 11:13:53

Widget開發
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91免费在线看 | 欧美福利| 国产精品久久久久aaaa樱花 | 亚洲成人免费在线观看 | 91久久国产综合久久 | 亚洲成人一级 | 亚洲综合色站 | 亚洲成人精品国产 | 韩国av网站在线观看 | 欧美一区二区三区视频在线播放 | 一区二区三区在线 | 国产 日韩 欧美 中文 在线播放 | 精品久久久久一区二区国产 | 欧美激情一区二区三区 | 成人在线网 | 欧美日韩国产精品 | av网站在线看| 欧美精品a∨在线观看不卡 欧美日韩中文字幕在线播放 | 伊人在线视频 | 久久久久国产精品www | 久久精品成人 | 超碰免费在线 | 国产精品久久久久久吹潮 | 激情五月综合 | 天天色天天色 | 日韩欧美成人精品 | 国产精品欧美一区二区 | 在线成人免费视频 | 一色桃子av一区二区 | 欧美a级成人淫片免费看 | 亚洲精品免费视频 | 亚州激情| 久久一久久 | 亚洲精品不卡 | 久久久性 | 91在线视频观看 | 国产在线二区 | 一级特黄视频 | 日本精品一区二区三区在线观看 | 久久久精彩视频 | 久久免费高清 |