Nokia中文解决方案(3)

1、从缺省堆中分配内存单元
TSS000504
设备, 软件 版本:
S60 3rd Edition

创建日期:

描述:
一般来说内存单元是从当前线程堆中分配的,但有时无法这样做,特别当要分配的内存单元很大时。
我们可以生成一个新的堆,从它那里获取我们需要的内存单元,示例如下:


Code:
//Try to create a heap in a local chunk.
//The minimum length of the heap is 10M and the maximum length is 20M

RHeap *pChunkHeap = UserHeap::ChunkHeap(NULL, 10000*1024, 20000*1024);

if (RHeap)
{

    void *mallocBuffer = NULL;

    TInt size = 8000*1024;  //Try to allocate a 8M memory cell

    mallocBuffer = pChunkHeap->Alloc(size);

    if (mallocBuffer )
    {
         //... Use this memory cell ...
    }

}

 

2、显示多行信息的询问对话框
TSS000677
设备, 软件 版本:
S60 3rd Edition

详细描述:

下列代码演示了如何使用一个可以显示多行信息的询问对话框:

Code:
_LIT(KTxtApplicationName, "Application Title");

    HBufC* sMessage =

    StringLoader::LoadLC( R_MESSAGE );

    HBufC* sTitle = HBufC::NewLC( KTxtApplicationName().Length() );

    sTitle->Des().Append( KTxtApplicationName );    

    CAknMessageQueryDialog* dialog = new ( ELeave ) CAknMessageQueryDialog();

    CleanupStack::PushL( dialog );

    dialog->PrepareLC( R_AVKON_MESSAGE_QUERY_DIALOG );

    dialog->QueryHeading()->SetTextL( *sTitle );

    dialog->SetMessageTextL( *sMessage );

    dialog->RunLD();

    CleanupStack::Pop(); // dialog

    CleanupStack::PopAndDestroy(2); // sTitle, sMessage
显示在对话框中的信息是从资源文件加载的,我们在.rss文件中需要有如下定义:

Code:
    #define qtn_message “First Line /nSecond Line”   

    RESOURCE TBUF r_message

       {

       buf = qtn_message;

       }

3、情景模式
1)如何获取S60第三版中情景模式的相关信息
TSS000715

设备, 软件 版本:
S60 3rd Edition
S60 3rd Edition, FP1

详细描述
我们可以通过Profiles Engine API来获取关于情景模式的细节信息,如定义的情景模式的顺序位置,以及他们的名称等。

这里的API可以通过下列获得
Extensions plug-in package for S60 3rd Edition SDK
http://www.forum.nokia.com/info/sw.n...Pack1.zip.html

解决方案
下列代码演示了如何找出每个情景模式的名称:

Code:
#include <mprofileengine.h>         // link against ProfileEng.lib

    #include <MProfilesNamesArray.h>

    MProfileEngine* profileEngine = CreateProfileEngineL();

    CleanupReleasePushL( *profileEngine );   

    MProfilesNamesArray* profileNames =

        profileEngine->ProfilesNamesArrayLC();       

    for( TInt i = 0; i < profileNames->MdcaCount(); ++i )

        {

        // Name of each profile is returned by

        // profileNames->ProfileName(i)->Name();

        }

    CleanupStack::PopAndDestroy(2); // profileNames, profileEngine
2)如何在S60第三版FP1上设置情景模式
TSS000623

设备, 软件 版本:
S60 3rd Edition, FP1

概述
可以用过Profile Engine Wrapper API来设置情景模式

解决方案
下列这段示例代码演示了如何设置当前情景模式为静音。
需要在mmp文件中添加链接库ProfileEngine.lib
需要包含的头文件有 mproengengine.h, proengfactory.h, profile.hrh


Code:
MProEngEngine* engine = ProEngFactory::NewEngineL();

CleanupReleasePushL(*engine);

engine->SetActiveProfileL(EProfileSilentId);

CleanupStack::PopAndDestroy(1);

4、如何切换程序UI方向为横屏或竖屏
TSS000676


设备, 软件 版本:
S60 3rd Edition
S60 3rd Edition, FP1


详细描述:
缺省情况下,程序是根据手机屏幕的当前方向开始启动的。如果要强制程序以横屏或竖屏的模式启动,那我们在CAknAppUi::ConstructL()方法

中调用BaseConstructL()时就要传递相应的flag值:

Code:
    void CMyAppUi::ConstructL()
        {

        BaseConstructL( EAknEnableSkin | EAppOrientationLandscape );    // start in landscape mode

        ...

        }
如果要在程序运行期间改变方向,则需要调用:

Code:
    void CAknAppUiBase::SetOrientationL( TAppUiOrientation aOrientation );这里的参数为EAppUiOrientationLandscape和

EAppUiOrientationPortrait,注意这种情况下的调用就不要再向BaseConstructL()中传递相同的参数了。

 


5、怎么通过程序锁定键盘
TSS000648

设备, 软件 版本:
S60 1st Edition
S60 2nd Edition and FP1, FP2, FP3
S60 3rd Edition and FP1


详细描述:
我们可以通过RAknKeyLock类来锁定键盘

Code:
    #include <aknkeylock.h>     // link against avkon.lib

    RAknKeyLock keyLock;

    if( keyLock.Connect() == KErrNone )
    {

        keyLock.EnableKeyLock();

        keyLock.Close();

    }


6、如何准备开始中文程序的开发
TSS000674

设备, 软件 版本:
S60 2nd Edition, FP1, FP2, FP3
S60 3rd Edition

详细描述
在S60第三版中,你可以通过开始菜单选择语言种类:

通过 '''开始 > 程序 > S60 Developer Tools > 3rd Edition SDK > 1.0 > Languages > Change to Chinese'''

在S60第二版,FP3中,可以在模拟器中选择语言:
'''Emulator > Tools > References > General Settings > Language'''


在S60第二版,FP1和FP2中,有2个独立的中文版本SDK可供下载,在
http://www.forum.nokia.com/info/sw.n...16-3.0-mr.html
可以找到。

在Series 80 2nd SDK中,没有中文版的支持。

7、如何获取正在运行任务的列表
TSS000649

设备, 软件 版本:
S60 1st Edition
S60 2nd Edition and FP1, FP2, FP3
S60 3rd Edition and FP1
Series 80 2nd Edition


详细描述:
描述
Symbian操作系统的应用程序框架提供了一组API用以获得当前正在运行的任务的信息(无论其在前台或后台运行)。


解决方案
我们可以使用TApaTaskList获取当前正在运行的任务的列表。具体任务是通过正在运行的程序window group来识别的,在构造TApaTaskList时

我们需要将window server的session作为参数传递进去。


Code:
#include <apgtask.h>    // link against apgrfx.lib

    TApaTaskList tasklist(CCoeEnv::Static()->WsSession());

    TApaTask taskInForeground = tasklist.FindByPos( 0 );

    // Window Group ID of the foreground task

    TInt WindowGroupIdentifier = taskInForeground.WgId();

    // Thread ID of the foreground task

    TThreadId ThreadIdentifier = taskInForeground.ThreadId();
TApaTaskList中第一个任务是在前台运行的那个(相关的window group位置顺序是从0开始的)

TApaTask包括很多与task相关的有用信息,如线程标识(ThreadId())以及window group标识(WgId()).

此外,还有一些有用的函数方法,如EndTask(),用来请求某任务正常关闭,以及KillTask()用来直接中止某任务。

SendToBackground()以及BringToForeground()方法可以用来控制程序在任务列表中的位置。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值