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

franksunny的個(gè)人技術(shù)空間
獲得人生中的成功需要的專注與堅(jiān)持不懈多過(guò)天才與機(jī)會(huì)。 ——C.W. Wendte

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

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

 

在非依賴于UIS60程序中,也就是不建立在控件環(huán)境基礎(chǔ)上的程序,比如控制臺(tái)應(yīng)用程序,獨(dú)立的線程等。在這些程序中需要彈提示信息的時(shí)候,就不能直接用基于CCoeControl的任何UI類了,因?yàn)檫@些程序中沒(méi)有供養(yǎng)CCoeControl生存的CCoeEnv環(huán)境,當(dāng)然不嫌繁瑣,在程序的main函數(shù)中像自己創(chuàng)建活動(dòng)規(guī)劃器一樣去創(chuàng)建CCoeEnv環(huán)境也是一個(gè)可行的方法,但是這超出本文的涉及范圍,本文提出的是不創(chuàng)建CCoeEnv環(huán)境情況下,通過(guò)RNotifierRNotifier的派生類來(lái)實(shí)現(xiàn)彈提示信息。

RNotifier簡(jiǎn)單應(yīng)用

其實(shí)RNotifierRFs一樣都是派生自RSessionBase,所以使用起來(lái)也是類似的,下面給出一個(gè)最簡(jiǎn)單的例子代碼

       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();

運(yùn)行上述代碼可以得到如下的對(duì)話框提示

RNotifier本身和RFs是基于Symbian OS的,而非專屬于S60平臺(tái)的,所以在UIQ等平臺(tái)上繼續(xù)可以使用RNotifier,這在跨平臺(tái)開發(fā)上相當(dāng)?shù)谋憷∪チ艘浦驳目鄲馈?/span>

RNotify復(fù)雜應(yīng)用

上面例子代碼是最簡(jiǎn)單的一種RNotifier的應(yīng)用,為了開發(fā)的方便和提高開發(fā)效率,S60封裝了一套CAknGlobal*RAknKeyLock等的類供第三方開發(fā)者使用,由于在UIQ平臺(tái)上我沒(méi)有涉及過(guò),而且目前借助S60的開源代碼,我就拿一個(gè)S60中的相關(guān)類CAknGlobalConfirmationQuery來(lái)說(shuō)明下吧,在源代碼sf\mw\classicui\uifw\AvKon\notifsrc路徑下面有多個(gè)類似類的源代碼。其實(shí)CAknGlobalConfirmationQuery除了二階段構(gòu)造外,最主要的就是ShowConfirmationQueryLUpdateConfirmationQueryCancelConfirmationQuery三個(gè)函數(shù),這三個(gè)函數(shù)的代碼羅列如下

        /**

        * 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

}

該函數(shù)用于顯示對(duì)話框。其主要的實(shí)現(xiàn)就是調(diào)用RNotifierStartNotifierAndGetResponse函數(shù)。

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);

}

該函數(shù)用于對(duì)話框產(chǎn)生后更新對(duì)話框,其功能就是使用函數(shù)RNotifier::UpdateNotifier

EXPORT_C void CAknGlobalConfirmationQuery::CancelConfirmationQuery()

{

    if (iBuffer)

    {

        iNotify.CancelNotifier(KAknGlobalConfirmationQueryUid);

        delete iBuffer;

        iBuffer = 0;

    }

}

該函數(shù)用于對(duì)話框產(chǎn)生后程序取消對(duì)話框,其功能就是使用函數(shù)RNotifier::CancelNotifier

RNotifier的實(shí)現(xiàn)跟蹤

通過(guò)以上兩個(gè)代碼,我們差不多對(duì)RNotifier類的使用了解了,但是這個(gè)RNotifier到底是如何實(shí)現(xiàn)彈出一個(gè)對(duì)話框呢?

其實(shí)RNotifier的真正實(shí)現(xiàn)是通過(guò)Symbian OSC/S架構(gòu)來(lái)實(shí)現(xiàn)的,這個(gè)在文章開篇提到RNotifierRFs一樣派生自RSessionBase就已經(jīng)埋下了伏筆。

RNotifier的源代碼實(shí)現(xiàn)位于sf\os\kernelhwsrv\kernel\eka\euser\us_ksvr.cpp,這個(gè)代碼中還有RChunkRDeviceRHandleBase等等基礎(chǔ)類的實(shí)現(xiàn)代碼。

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

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

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

歡迎對(duì)其有更深入挖掘的同學(xué)能夠發(fā)布新的小結(jié),到時(shí)記得分享到我的郵箱frank.sunny@163.com,當(dāng)然假如我文中有什么錯(cuò)誤也希望能夠告知我一下,謝謝。

 

 

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

常用鏈接

留言簿(13)

隨筆分類

個(gè)人其它博客

基礎(chǔ)知識(shí)鏈接

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            一区二区三区你懂的| 国产精品视频免费观看| 亚洲精品一区二区三区婷婷月| 久久天天狠狠| 米奇777超碰欧美日韩亚洲| 久久久久久亚洲精品杨幂换脸| 久久激情久久| 欧美成人tv| 99pao成人国产永久免费视频| 一本久道久久综合婷婷鲸鱼| 亚洲男女自偷自拍图片另类| 久久精品人人做人人综合| 麻豆成人在线观看| 欧美精品午夜视频| 国产精品午夜av在线| 一区二区三区在线高清| 日韩午夜精品视频| 欧美一级午夜免费电影| 欧美不卡福利| 亚洲一品av免费观看| 久久综合色播五月| 国产精品国内视频| 亚洲国语精品自产拍在线观看| 亚洲一区观看| 欧美va天堂va视频va在线| 亚洲午夜电影网| 久久久久在线| 国产精品一区在线播放| 亚洲精品麻豆| 久久亚洲不卡| 亚洲欧美日韩专区| 欧美日韩精品久久| 亚洲国产精品成人精品| 欧美亚洲一区在线| 99在线观看免费视频精品观看| 久久人人爽人人爽爽久久| 国产精品yjizz| 亚洲免费成人av| 嫩草成人www欧美| 欧美在线看片| 国产精品一区亚洲| 亚洲在线一区二区| 亚洲美女91| 欧美多人爱爱视频网站| 在线日韩一区二区| 久久久精品久久久久| 亚洲视频在线二区| 欧美日韩在线高清| 一本色道久久综合亚洲精品婷婷 | 久久一二三四| 亚洲一区二区免费视频| 欧美激情二区三区| 亚洲精品欧美日韩专区| 欧美成人亚洲成人日韩成人| 午夜精品久久久久99热蜜桃导演| 欧美日韩国产成人在线观看| 亚洲国产一成人久久精品| 可以看av的网站久久看| 欧美在线看片| 狠狠色狠狠色综合人人| 久久免费视频在线| 久久精品欧美日韩| 亚洲国产精品一区二区www| 欧美 亚欧 日韩视频在线| 久久久久久999| 亚洲国产第一| 亚洲国产乱码最新视频| 欧美成人一区二区| 亚洲视频视频在线| 亚洲欧美清纯在线制服| 国产一区二区三区久久精品| 久久久久国色av免费看影院| 久久激情五月婷婷| 在线观看91精品国产入口| 欧美激情无毛| 欧美私人啪啪vps| 欧美制服第一页| 久久精品国产99精品国产亚洲性色| 国产一区二区日韩精品| 欧美成人影音| 欧美系列亚洲系列| 久久精品亚洲一区二区| 卡通动漫国产精品| 一本久久综合| 午夜精彩视频在线观看不卡| 激情懂色av一区av二区av| 亚洲国产mv| 欧美系列一区| 嫩模写真一区二区三区三州| 欧美精品三区| 久久久不卡网国产精品一区| 欧美**人妖| 欧美一区二区三区在线观看| 免费观看成人www动漫视频| 亚洲一区二区在线看| 久久久久综合| 午夜精品视频在线| 嫩草影视亚洲| 久久精品一区二区三区四区| 欧美美女bbbb| 久久这里只有| 国产精品一二三四区| 亚洲国产美女久久久久| 国产日韩在线一区| 亚洲精品一品区二品区三品区| 国产亚洲欧美日韩一区二区| 夜夜嗨一区二区| 亚洲韩国一区二区三区| 欧美日韩dvd在线观看| 欧美三区在线观看| 久久人91精品久久久久久不卡| 欧美激情四色| 欧美在线播放一区| 欧美黄污视频| 久热精品在线视频| 国产精品久久久久久久久借妻| 免费在线成人av| 国产精品综合久久久| 最新69国产成人精品视频免费| 国产伊人精品| 亚洲在线免费观看| 亚洲一区二区三区乱码aⅴ蜜桃女| 久久天天狠狠| 久久九九久精品国产免费直播| 欧美色播在线播放| 91久久精品一区二区三区| 在线观看不卡av| 久久成人免费日本黄色| 午夜久久美女| 欧美日韩一区二区在线| 亚洲国产精品一区制服丝袜 | av成人黄色| 久久最新视频| 噜噜噜久久亚洲精品国产品小说| 国产日韩高清一区二区三区在线| 亚洲深夜影院| 午夜精品999| 国产嫩草影院久久久久| 亚洲一区二区伦理| 欧美一区二区啪啪| 国产日韩在线看片| 久久精品在线播放| 男女视频一区二区| 亚洲精品在线三区| 欧美日韩一区二区视频在线观看| 一区二区三区av| 欧美怡红院视频| 国际精品欧美精品| 久久在线免费| 亚洲精品男同| 午夜视频一区二区| 黑丝一区二区三区| 欧美**字幕| 亚洲午夜视频在线| 久久婷婷国产综合精品青草| 亚洲高清激情| 欧美日韩小视频| 亚洲欧美成人综合| 男人的天堂亚洲在线| 亚洲伦理网站| 国产精品久久久久久久久久妞妞| 亚洲综合色自拍一区| 免费日韩成人| 亚洲亚洲精品在线观看| 国产婷婷成人久久av免费高清| 久久视频在线免费观看| 日韩午夜免费视频| 久久久久高清| 日韩一级精品视频在线观看| 国产精品国码视频| 久久一综合视频| 亚洲视屏在线播放| 欧美国产一区二区在线观看 | 欧美中文字幕视频| 久久婷婷丁香| 亚洲精品永久免费| 久久一区二区三区av| 在线一区二区三区四区五区| 国产一区二区三区的电影| 欧美刺激性大交免费视频| 亚洲一区二区三区涩| 久久深夜福利| 亚洲字幕一区二区| 亚洲人成欧美中文字幕| 国产亚洲a∨片在线观看| 欧美韩日一区二区三区| 亚洲欧美日韩在线播放| 亚洲人成在线播放| 嫩模写真一区二区三区三州| 性做久久久久久| 一本色道久久综合精品竹菊| 禁断一区二区三区在线| 国产精品视频一二三| 欧美区一区二| 老司机一区二区三区| 欧美在线观看视频在线| 亚洲一区精品视频| 中文一区二区在线观看| 亚洲精品视频在线观看网站| 欧美成人精品高清在线播放|