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

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

 完整文檔下載地址http://www.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>
            国产亚洲一本大道中文在线| 黄色成人在线网址| 日韩小视频在线观看| 亚洲春色另类小说| 免费一级欧美在线大片| 亚洲欧洲日本专区| 91久久精品www人人做人人爽| 欧美成人免费观看| 日韩一区二区久久| 亚洲免费一在线| 国内精品视频一区| 亚洲国产欧美另类丝袜| 欧美日韩一区二区三区视频| 午夜视频一区| 美国十次了思思久久精品导航| 亚洲韩国精品一区| 在线亚洲观看| 1000部国产精品成人观看| 亚洲黄色小视频| 国产精品亚发布| 蜜臀av在线播放一区二区三区| 欧美日韩国产综合一区二区| 欧美在线网站| 蜜臀久久99精品久久久久久9| 一区二区三区视频观看| 亚洲欧美激情诱惑| 亚洲国产天堂久久综合网| av不卡在线观看| 永久域名在线精品| 在线中文字幕不卡| 亚洲国产综合在线看不卡| 中文国产成人精品| 亚洲国产精品免费| 亚洲一区二区三区在线| 欧美一区二粉嫩精品国产一线天| 亚洲精品美女久久7777777| 亚洲女性裸体视频| 9色国产精品| 麻豆av一区二区三区久久| 午夜精品亚洲| 欧美日韩小视频| 免费在线观看精品| 国产日韩精品一区二区| 91久久一区二区| 在线观看成人av电影| 亚洲欧美在线磁力| 亚洲视频在线观看| 欧美精品久久一区| 欧美高清视频www夜色资源网| 国产精品你懂的| 亚洲卡通欧美制服中文| 亚洲人成欧美中文字幕| 久久精品首页| 久久偷看各类wc女厕嘘嘘偷窃| 国产精品福利在线观看| 亚洲精品视频免费| 91久久综合| 免费在线观看精品| 欧美搞黄网站| 91久久国产精品91久久性色| 久久av红桃一区二区小说| 性色av香蕉一区二区| 国产精品久久久久久久久借妻| 亚洲精品久久久久中文字幕欢迎你| 亚洲激情一区二区| 久久综合国产精品台湾中文娱乐网| 久久久欧美一区二区| 国内精品99| 久久中文久久字幕| 亚洲国产精品久久久久秋霞蜜臀| 亚洲国产精品一区二区第四页av| 理论片一区二区在线| 欧美国产精品专区| 日韩视频永久免费| 欧美日韩午夜精品| 亚洲视频一区二区| 欧美一站二站| 激情亚洲网站| 欧美成人精品福利| 日韩视频中文| 久久国产视频网| 精品福利av| 欧美国产日本高清在线| 一区二区三区精品视频| 久久狠狠亚洲综合| 永久91嫩草亚洲精品人人| 欧美大片免费观看| 在线综合亚洲欧美在线视频| 性欧美精品高清| 在线观看国产欧美| 欧美日韩卡一卡二| 久久精品99国产精品日本| 亚洲成人资源网| 亚洲欧美三级伦理| 一区二区在线视频| 欧美日韩国产一区精品一区 | 欧美高清一区| 亚洲一区二区三区精品在线观看| 国产精品亚洲综合天堂夜夜| 久久综合久久久| 欧美专区在线播放| 亚洲国产精品日韩| 国产精品自拍视频| 免费成人av| 午夜精品久久久久99热蜜桃导演| 欧美成人免费在线观看| 亚洲免费视频观看| 最新日韩欧美| 国产亚洲福利一区| 欧美久久一级| 另类国产ts人妖高潮视频| 一区二区三区国产在线| 欧美成人免费观看| 久久精品亚洲精品国产欧美kt∨| 亚洲人成网站在线观看播放| 国产精品一区二区黑丝| 欧美激情第1页| 久久九九久精品国产免费直播| 日韩视频一区二区三区| 麻豆视频一区二区| 欧美一区三区三区高中清蜜桃| 亚洲日本免费电影| 国产亚洲综合在线| 国产精品热久久久久夜色精品三区| 免费久久99精品国产自在现线| 亚洲一区国产一区| 99国内精品久久久久久久软件| 欧美成人乱码一区二区三区| 久久久久久成人| 亚洲欧美精品suv| 中文av一区二区| 亚洲麻豆视频| 亚洲黄色一区| 在线日本成人| 亚洲国产精品99久久久久久久久| 国产亚洲亚洲| 好看的日韩av电影| 国产午夜精品视频免费不卡69堂| 欧美性片在线观看| 欧美日韩在线看| 欧美三级电影精品| 欧美日韩精品一区二区天天拍小说 | 亚洲视频一区二区免费在线观看| 亚洲国产91| 1769国产精品| 亚洲国产精品视频| 亚洲精品之草原avav久久| 亚洲乱码一区二区| 亚洲婷婷在线| 亚洲愉拍自拍另类高清精品| 亚洲天堂第二页| 亚洲欧美不卡| 欧美在线二区| 玖玖视频精品| 欧美激情一区二区三区蜜桃视频| 亚洲第一在线综合网站| 91久久综合| 亚洲裸体俱乐部裸体舞表演av| 夜夜嗨av一区二区三区免费区| 亚洲视频在线二区| 午夜亚洲一区| 久色成人在线| 欧美午夜不卡在线观看免费| 国产精品伦子伦免费视频| 国产一区二区中文| 亚洲国产天堂久久综合网| 一本一本大道香蕉久在线精品| 亚洲午夜影视影院在线观看| 欧美亚洲一区在线| 麻豆精品传媒视频| 亚洲精品亚洲人成人网| 亚洲在线黄色| 免费观看日韩av| 国产精品yjizz| 激情婷婷久久| 一本综合久久| 久久人人看视频| 亚洲精品少妇| 久久精品理论片| 久久国产精品亚洲77777| 国产一区自拍视频| 亚洲精品视频啊美女在线直播| 亚洲一区二区三区高清不卡| 欧美一区二区久久久| 免费试看一区| 亚洲一二三区精品| 久久一区二区三区四区五区| 欧美日韩亚洲三区| 禁久久精品乱码| 亚洲香蕉伊综合在人在线视看| 久久久青草青青国产亚洲免观| 亚洲人成毛片在线播放女女| 先锋亚洲精品| 欧美视频免费在线| 亚洲国产中文字幕在线观看| 久久www成人_看片免费不卡| 亚洲精品久久| 美女日韩欧美| 韩国一区电影| 久久精品国产99|