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()方法可以用来控制程序在任务列表中的位置。