问题十一、怎么使用BUTTON 类创建一个 BUTTON
S60里面好像没有BUTTON的类吧
1.好像没有必要做BUTTON,触发事件使用MENU就可以了
2.如果非要做的话,可以尝试的下面的简单方法
2.1 使用一个LABEL(设置一下边框属性可以使这个LABEL像一个所谓的BUTTON)
2.2 可以在该LABEL的所处CONTAINER的
OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType);
处理KEY事件(判断该LABEL拥有FOCUS)
问题十二、图标资源的读取与储存结构
可以在AknView类中定义如下的图标数组进行储存图标数据结构,这种结构有图表位图和蒙板(mask)
CArrayPtr* iIconArray;
具体实现方法:
iIconArray->AppendL(CEikonEnv::Static()->CreateIconL(iMbmFile, EMbmFile1, EMbmFile1_mask));
在需要贴图标的地方用这个数组句柄引用即可
问题十四、一段左软键菜单的控制代码
要求:1点了左软键之后,就相当与点了ok键。
2 :把左软键菜单的地方由option改为select
// My.rss
RESOURCE EIK_APP_INFO
{
menubar = r_bmpmanip_menubar;
// cba = R_AVKON_SOFTKEYS_OPTIONS_EXIT;
cba = R_AVKON_SOFTKEYS_SELECT_BACK; // see “epoc32\include\avkon.rsg”
}
// MyAppUi.cpp
void CMyAppUi::HandleCommandL(TInt aCommand)
{
switch(aCommand)
{
case EAknSoftkeySelect: // see “epoc32\include\avkon.hrh”
{
// left softkey is pressed…
}
…
}
}
}
问题十五、如何在CAknGrid上绘制背景图
从CAknGrid派生自己的子类,然后自己draw,如:
void CYourGrid:raw(const TRect& aRect) const
{
CWindowGc& gc = SystemGc();
gc.DrawBitmap(aRect, aYourBitmap);
CAknGrid:raw(aRect);
}
问题十六、两种从资源文件中读取常量的方法
第一种 是老的方法了 要先 #include 才可以用
TBuf<64> buf;
CEikonEnv::Static()->ReadResource(buf,R_APP_LABEL);
R_APP_LABEL 就是我们在资源文件中定义的常量
第二种 新方法 要先 #include
HBufC* buf;
buf=StringLoader::LoadLC(R_APP_LABEL);
在此之前要求先把资源文件给加进来噢, 格式 #include < 项目名.rsg>
问题十七、如何取得imei
#ifndef __WINS__
TPlpVariantMachineId imei;
PlpVariant::GetMachineIdL(imei);
aImei.Copy(imei);
#else
问题十八、如何在Series 60窗体上绘制标签
这是一种在Series 60窗体上显示标签的方法。你可以在电量图标或信号图标旁边显示一个标签,为此需要用程序实现。我使用了从CCoeControl继承的CIndicatorIcon 这个类。你需要象这样创建ConstructL():
void CIndicatorIcon::ConstructL()
{
iMyWindowGroup = RWindowGroup(iCoeEnv->WsSession());
User::LeaveIfError(iMyWindowGroup.Construct((TUint32)&iMyWindowGroup));
iMyWindowGroup.SetOrdinalPosition(0, ECoeWinPriorityAlwaysAtFront);
iMyWindowGroup.EnableReceiptOfFocus(EFalse);
CreateWindowL(&iMyWindowGroup);
// 默认设置指示标签静止
SetIndicatorIconL(EIndicatorIconAppActive);
ActivateL();
}
在ConstructL()中,我调用了另一个函数 SetIndicatorIconL()设置标签:
void CIndicatorIcon::SetIndicatorIconL(TIndicatorIcon aIndicatorIconType, TBool aRedraw)
{
switch(aIndicatorIconType)
{
case EIndicatorIconEmpty:
iIndicator = CEikonEnv::Static()->CreateBitmapL(KSysIconFile, EMbmAvkonQgn_prop_empty);
iIndicatorMask = CEikonEnv::Static()->CreateBitmapL(KSysIconFile, EMbmAvkonQgn_prop_empty_mask);
break;
case EIndicatorIconAppActive:
iIndicator = CEikonEnv::Static()->CreateBitmapL(KSysIconFile, EMbmAvkonQgn_bt_connect_on);
iIndicatorMask = CEikonEnv::Static()->CreateBitmapL(KSysIconFile, EMbmAvkonQgn_bt_connect_on_mask);
break;
case EIndicatorIconAppInactive:
iIndicator = CEikonEnv::Static()->CreateBitmapL(KSysIconFile, EMbmAvkonQgn_prop_bt_audio);
iIndicatorMask = CEikonEnv::Static()->CreateBitmapL(KSysIconFile, EMbmAvkonQgn_prop_bt_audio_mask);
break;
default:
break;
}
SetRect(TRect(TPoint(KIndicatorPosX, KIndicatorPosY),iIndicator->SizeInPixels()));
// 如果 aRedraw == ETrue 从新绘制画布
if(aRedraw)
{
DrawNow();
}
}
你需要跳过CCoeControl的Draw()函数代码如下 :
void CIndicatorIcon::Draw(const TRect& aRect) const
{
CWindowGc& gc = SystemGc();
gc.Clear();
gc.SetBrushStyle(CGraphicsContext::ENullBrush);
gc.BitBltMasked(TPoint(aRect.iTl.iX, aRect.iTl.iY),
iIndicator,
TRect(TPoint(0, 0), iIndicator->SizeInPixels()),
iIndicatorMask,
ETrue);
}
现在把这些行加入到程序AppUi类的ConstructL()中:
iIndicatorIcon = CIndicatorIcon::NewL();
// 下一行将画标签并绘制到屏幕上
iIndicatorIcon->SetIndicatorIconL(CIndicatorIcon::EIndicatorIconAppInactive, ETrue);
问题十九、判断E盘是否可用
TDriveInfo driveInfo;
TInt error = fs.Drive(driveInfo, EDriveE);
User::LeaveIfError(error);
if (driveInfo.iDriveAtt == KDriveAbsent)
{
// drive E is absent
}
Reference: “How to retrieve drive and volume information”
http://www.symbian.com/developer/techlib/v8.1adocs/doc_source/guide/Base-subsystem-guide/N1007E/FileServerClientSide/FileServerClientSideGuide2/DriveAndVolumeExample.guide.html
问题二十、读取symbian上文件的例子
RFile igpFile;
RFs fs;
TInt aSeek = 0;
TInt aFileSize;
TBuf16 igpName16;
TParse parse ;
parse.Set(CEikonEnv::Static()->EikAppUi()->Application()->AppFullName(), NULL, NULL);
TBuf16<128> igpFullName ;
igpFullName.Copy (parse.DriveAndPath()) ;
igpFullName.Append (_L(”dice1.igp”));
fs.Connect();
// Write to file for later usage
igpFile.Open( fs,
igpFullName,
EFileRead | EFileStream );
igpFile.Seek( ESeekEnd, aSeek );
aFileSize = aSeek;
aSeek = 0;
igpFile.Seek( ESeekStart, aSeek );
aFileBuffer = HBufC8::NewL( aFileSize );
igpFile.Read( aFileBuffer->Des (), aFileSize );
igpFile.Close();
fs.Close();