青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

franksunny的個人技術空間
獲得人生中的成功需要的專注與堅持不懈多過天才與機會。 ——C.W. Wendte

 完整文檔下載地址http://m.shnenglu.com/Files/franksunny/RNotifier.7z

如何在S60UI框架程序中彈提示信息

 

在非依賴于UIS60程序中,也就是不建立在控件環境基礎上的程序,比如控制臺應用程序,獨立的線程等。在這些程序中需要彈提示信息的時候,就不能直接用基于CCoeControl的任何UI類了,因為這些程序中沒有供養CCoeControl生存的CCoeEnv環境,當然不嫌繁瑣,在程序的main函數中像自己創建活動規劃器一樣去創建CCoeEnv環境也是一個可行的方法,但是這超出本文的涉及范圍,本文提出的是不創建CCoeEnv環境情況下,通過RNotifierRNotifier的派生類來實現彈提示信息。

RNotifier簡單應用

其實RNotifierRFs一樣都是派生自RSessionBase,所以使用起來也是類似的,下面給出一個最簡單的例子代碼

       RNotifier vNotifier;

       User::LeaveIfError(vNotifier.Connect());

       CleanupClosePushL(vNotifier);

 

       //title and context

       TBuf<256> title;

       TBuf<256> context;

       title.Copy(_L("info"));

       context.Copy(_L("data"));

 

       // Button text

       _LIT(KYesButton, "Yes");

       _LIT(KNoButton, "No");

 

       // Display the dialog

       TInt button;

       TRequestStatus status;

       vNotifier.Notify(title, context, KYesButton, KNoButton, button, status);

       User::WaitForRequest(status);

 

       // destroy notifier

       CleanupStack::PopAndDestroy();

運行上述代碼可以得到如下的對話框提示

RNotifier本身和RFs是基于Symbian OS的,而非專屬于S60平臺的,所以在UIQ等平臺上繼續可以使用RNotifier,這在跨平臺開發上相當的便利,省去了移植的苦惱。

RNotify復雜應用

上面例子代碼是最簡單的一種RNotifier的應用,為了開發的方便和提高開發效率,S60封裝了一套CAknGlobal*RAknKeyLock等的類供第三方開發者使用,由于在UIQ平臺上我沒有涉及過,而且目前借助S60的開源代碼,我就拿一個S60中的相關類CAknGlobalConfirmationQuery來說明下吧,在源代碼sf\mw\classicui\uifw\AvKon\notifsrc路徑下面有多個類似類的源代碼。其實CAknGlobalConfirmationQuery除了二階段構造外,最主要的就是ShowConfirmationQueryLUpdateConfirmationQueryCancelConfirmationQuery三個函數,這三個函數的代碼羅列如下

        /**

        * Shows global Confirmation query synchronously

        *

        * @param    aStatus         TRequestStatus which will be completed when user

        *                               selects one item from the list query.

        * @param    aPrompt         Prompt text

        * @param    aSoftkeys       Softkey resource

        * @param    aAnimation      Animation resource

        * @param    aTone           Tone id

        * @param    aDismissWithAllKeys If set ETrue the query gets dismissed with all

        *                                   keypresses

        */

EXPORT_C void CAknGlobalConfirmationQuery::ShowConfirmationQueryL(

    TRequestStatus& aStatus,

    const TDesC& aPrompt,

    TInt aSoftkeys,

    TInt aAnimation,

    const TDesC& aImageFile,

    TInt aImageId,

    TInt aImageMaskId,

    CAknQueryDialog::TTone aTone,

    TBool aDismissWithAllKeys )

{

    delete iBuffer;

    iBuffer = NULL;

    iBuffer = CBufFlat::NewL(KBufferGranularity);

 

    RBufWriteStream bufStream;

    bufStream.Open(*iBuffer);

 

    CleanupClosePushL(bufStream);

 

    bufStream.WriteInt32L(KAKNNOTIFIERSIGNATURE);

 

    if ( aDismissWithAllKeys )

    {

        bufStream.WriteInt8L( ETrue );

    }

    else

    {

        bufStream.WriteInt8L( EFalse );

    }

 

    bufStream.WriteInt32L(aSoftkeys);

    bufStream.WriteInt32L(aAnimation);

    bufStream.WriteInt16L(aImageId);

    bufStream.WriteInt16L(aImageMaskId);

    bufStream.WriteInt16L(aTone);

    bufStream.WriteInt16L(aPrompt.Length());

    bufStream << aPrompt;

    bufStream.WriteInt16L(aImageFile.Length());

    if (aImageFile.Length())

    {

        bufStream << aImageFile;

    }

 

    bufStream.WriteInt32L(iSkinsMajorId);

    bufStream.WriteInt32L(iSkinsMinorId);

 

    if (iAknSDData)

    {

        bufStream.WriteInt8L(ETrue);

        bufStream << *iAknSDData;       

    }

    else

    {

        bufStream.WriteInt8L(EFalse);           

    }

 

    iBufferPtr.Set(iBuffer->Ptr(0));

    iNotify.StartNotifierAndGetResponse(aStatus, KAknGlobalConfirmationQueryUid,

        iBufferPtr, iResultBuf);

 

    CleanupStack::PopAndDestroy();  // bufStream

}

該函數用于顯示對話框。其主要的實現就是調用RNotifierStartNotifierAndGetResponse函數。

EXPORT_C void CAknGlobalConfirmationQuery::UpdateConfirmationQuery( TInt aSoftkeys )

{

    iSoftkeys = aSoftkeys;

    iCmd = EAknUpdateGlobalQuery;

    TPckgBuf<SAknNotifierPackage<SAknGlobalMsgQueryParams> > pckg;

    pckg().iParamData.iCmd = iCmd;

    pckg().iParamData.iSoftkeys = iSoftkeys;

 

    TPckgBuf<TInt> ret;

    iNotify.UpdateNotifier( KAknGlobalConfirmationQueryUid, pckg, ret);

}

該函數用于對話框產生后更新對話框,其功能就是使用函數RNotifier::UpdateNotifier

EXPORT_C void CAknGlobalConfirmationQuery::CancelConfirmationQuery()

{

    if (iBuffer)

    {

        iNotify.CancelNotifier(KAknGlobalConfirmationQueryUid);

        delete iBuffer;

        iBuffer = 0;

    }

}

該函數用于對話框產生后程序取消對話框,其功能就是使用函數RNotifier::CancelNotifier

RNotifier的實現跟蹤

通過以上兩個代碼,我們差不多對RNotifier類的使用了解了,但是這個RNotifier到底是如何實現彈出一個對話框呢?

其實RNotifier的真正實現是通過Symbian OSC/S架構來實現的,這個在文章開篇提到RNotifierRFs一樣派生自RSessionBase就已經埋下了伏筆。

RNotifier的源代碼實現位于sf\os\kernelhwsrv\kernel\eka\euser\us_ksvr.cpp,這個代碼中還有RChunkRDeviceRHandleBase等等基礎類的實現代碼。

RNotifier的服務器類CNotifierServer和服務器會話通道類CNotifierSession以及相關的其他類則位于sf\os\kernelhwsrv\kernel\eka\ewsrv\ws_main.cpp中。這些類的聲明則位于sf\os\kernelhwsrv\kernel\eka\include\twintnotifier.h文件中。

再深入進去,就會了解到RConsole類,這個類的聲明位于sf\os\kernelhwsrv\kernel\eka\include\e32twin.h中,代碼實現位于sf\os\kernelhwsrv\kernel\eka\ewsrv\co_cli.cpp中。搞了半天又遇到一個C/S架構,這個ClientServerCWsServer,其通道為CWsSession,在CWsSession內最主要的類是CWsWindow,這幾個類的聲明位于sf\os\kernelhwsrv\kernel\eka\include\ws_std.h,而這幾個類的實現代碼則又繞回到sf\os\kernelhwsrv\kernel\eka\ewsrv\ws_main.cp中去了。

好了,自己暫時只能走到這一步了,上面只是簡單給出一些源代碼的路徑,有興趣的同學可以去一探究竟,我才疏學淺就只能點到為止了。

歡迎對其有更深入挖掘的同學能夠發布新的小結,到時記得分享到我的郵箱frank.sunny@163.com,當然假如我文中有什么錯誤也希望能夠告知我一下,謝謝。

 

 

posted on 2010-12-17 21:26 frank.sunny 閱讀(2023) 評論(0)  編輯 收藏 引用 所屬分類: symbian 開發

常用鏈接

留言簿(13)

隨筆分類

個人其它博客

基礎知識鏈接

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲国产精品久久精品怡红院| 亚洲欧美在线视频观看| 亚洲看片免费| 最新国产拍偷乱拍精品| 亚洲国产精品久久久久秋霞不卡| 一区二区三区在线免费播放| 在线观看成人网| 亚洲日韩第九十九页| 日韩午夜电影在线观看| 亚洲在线观看视频| 久久精品伊人| 欧美国产日韩a欧美在线观看| 欧美成人69| 亚洲久色影视| 亚洲欧美韩国| 狂野欧美激情性xxxx欧美| 欧美—级在线免费片| 国产精品欧美日韩一区二区| 国产一区二区在线免费观看 | 一本色道久久综合狠狠躁的推荐| 一本到12不卡视频在线dvd| 午夜精品视频在线| 免费成年人欧美视频| 日韩视频中文| 久久久综合视频| 国产精品久久久对白| 亚洲第一精品福利| 午夜日韩av| 亚洲国产婷婷| 亚洲欧美日韩一区二区在线| 美国成人毛片| 国产欧美日韩精品一区| 日韩亚洲欧美成人| 欧美特黄视频| 禁断一区二区三区在线| 亚洲视频免费看| 老色批av在线精品| 亚洲天天影视| 欧美精品在线免费| 极品少妇一区二区| 亚洲你懂的在线视频| 欧美黄在线观看| 性感少妇一区| 国产精品v日韩精品| 亚洲国内精品在线| 久久久噜噜噜久久人人看| 一本在线高清不卡dvd| 欧美xx69| 亚洲国产欧美精品| 久久欧美肥婆一二区| 亚洲视频在线观看免费| 欧美极品欧美精品欧美视频| 亚洲成人在线| 蜜桃久久av| 久久精品国产999大香线蕉| 国产精品黄视频| 亚洲午夜久久久久久尤物| 亚洲国产合集| 欧美激情精品久久久久久黑人 | 亚洲视频精选| 亚洲精品国产精品乱码不99按摩| 久久久久久久久久久久久女国产乱 | 亚洲国产精品一区二区尤物区| 欧美一区二区三区在线观看| 国产精品毛片| 久久成人资源| 久久av一区| 尤妮丝一区二区裸体视频| 久久香蕉国产线看观看av| 欧美在线视频网站| 亚洲第一天堂av| 亚洲高清视频的网址| 欧美成熟视频| 亚洲欧美日韩成人| 性伦欧美刺激片在线观看| 国产日韩1区| 美女久久一区| 欧美精品久久久久久久免费观看 | 亚洲一区二区免费视频| 亚洲视频在线观看免费| 国产精品夜夜夜| 久久综合九色综合欧美就去吻| 美女精品在线观看| 久久亚洲精品视频| av成人天堂| 亚洲综合精品自拍| 精品成人国产在线观看男人呻吟| 免费观看30秒视频久久| 欧美精品成人一区二区在线观看| 亚洲视频免费观看| 欧美永久精品| 99天天综合性| 性伦欧美刺激片在线观看| 亚洲国产一区在线| 亚洲视频一区二区在线观看| 国产一区二区三区日韩| 亚洲国产精品久久91精品| 国产精品国产三级国产专区53| 久久久久国产精品人| 欧美日韩国产123区| 久久福利一区| 欧美日产国产成人免费图片| 欧美中文字幕视频| 欧美伦理视频网站| 久久男人资源视频| 国产精品乱人伦中文| 欧美激情va永久在线播放| 国产精品亚洲成人| 亚洲精品日日夜夜| 亚洲第一天堂无码专区| 午夜精品av| 亚洲图片欧美一区| 欧美成人资源网| 欧美xart系列在线观看| 国产日韩欧美日韩大片| 日韩午夜视频在线观看| 亚洲精品欧美| 欧美.www| 男女精品网站| 伊人狠狠色j香婷婷综合| 亚洲欧美成aⅴ人在线观看| 亚洲最新在线视频| 欧美大片专区| 欧美二区乱c少妇| 国产综合在线视频| 午夜国产精品影院在线观看| 亚洲愉拍自拍另类高清精品| 欧美精品一卡二卡| 亚洲激情国产| 99国产欧美久久久精品| 欧美成人在线免费视频| 欧美激情视频网站| 最新亚洲视频| 欧美成人按摩| 亚洲精品国产拍免费91在线| 亚洲精品一区二区三区蜜桃久| 久久在线观看视频| 亚洲第一页在线| 日韩一区二区免费高清| 欧美精品三区| 9l视频自拍蝌蚪9l视频成人| 亚洲少妇最新在线视频| 国产精品高潮呻吟久久| 亚洲综合精品一区二区| 久久久久久久网站| 在线日韩av片| 欧美日韩国产欧| 亚洲一区二区精品| 久久久久久国产精品一区| 精品成人乱色一区二区| 亚洲国产精品黑人久久久| 99re成人精品视频| 亚洲精品视频中文字幕| 欧美好骚综合网| 亚洲精品欧美专区| 亚洲综合另类| 国产最新精品精品你懂的| 久久影院午夜论| 亚洲激情av在线| 一区二区欧美日韩视频| 国产毛片一区| 久久久久国色av免费看影院| 欧美第一黄网免费网站| 妖精成人www高清在线观看| 国产精品美女999| 久久婷婷麻豆| 99riav久久精品riav| 久久福利视频导航| 亚洲伦理网站| 国产欧美一区二区在线观看| 久久综合九色综合欧美就去吻 | 欧美激情成人在线视频| 一本色道综合亚洲| 国产亚洲精品久久久久动| 亚洲精品免费在线播放| 欧美一区久久| 日韩视频在线一区二区| 国产色视频一区| 欧美日韩国产色综合一二三四| 亚洲欧美日韩第一区| 亚洲激情在线视频| 久久嫩草精品久久久精品一| 亚洲一区精品视频| 亚洲精品视频一区| 韩国三级电影一区二区| 欧美丝袜一区二区| 欧美国产三区| 久久一区国产| 欧美一区二区视频在线| 一区二区三区国产精品| 欧美激情aaaa| 免播放器亚洲| 久久久国产精品一区| 午夜精品久久久久久久久| 亚洲人成免费| 在线色欧美三级视频| 国产亚洲日本欧美韩国| 国产精品成人一区二区艾草| 欧美高清视频免费观看| 久久综合狠狠综合久久综合88|