Symbain--开发技巧总结100条

来源:互联网 发布:虚拟机多网络通信 编辑:程序博客网 时间:2024/04/28 15:11

      1. 获得控件ID。

  aControl->UniqueHandle();

  2. View显示提示信息。

  iEikonEnv->InfoMsg()

  3. 获得焦点的控件。

 

  4. 发送command事件的控件需要实现

  MQikCommandOperator。

  5. 好像可以获得任何子控件,多级。

  LocateControlByUniqueHandle(EMyViewLabel);

  6. 处理ListBox事件使用

  MQikListBoxObserver(HandleListBoxEventL)

  7. HandleControlEventL(CCoeControl* aControl, TCoeEvent aEventType)

  {

  // Call base class to get focus navigation right

  CQikViewBase::HandleControlEventL(aControl, aEventType);

  // ... 其他实现

  8. 查找获得焦点的控件

  QikFocusUtils::FindFocusedControl(*this);

  9. 异常处理:

  User::LeaveIfError() 检测返回TInt的方法。

  10. 文件:

  RFs& fs = iCoeEnv->FsSession();

  _LIT(KFileName, "c:/helloworld.txt");

  User::LeaveIfError(iFile.Replace(fs, KFileName, EFileWrite|EFileStreamText|EFileShareAny));

  iFile.WriteUint16L(0xFEFF); // Windows unicode file header.

  11. 调试输出:

  RDebug::Print(); //不知输出到哪里?

  12. 好像SetUniqueHandle后才能

  LocateControlByUniqueHandle<>()

  如果不使用此方法,可以不使用UniqueHandle ID.

  13. Pen模式下,OfferKeyEventL的导航键的TKeyEvent.iCode为0,

  Action的TKeyEvent.iScanCode为EStdKeyDevice8(172=0xAC).

  14. GIF显示CPAlbImageViewerBasic

  15. 所有继承于CCoeControl的控件重画都可以使用

  DrawNow()

  延迟刷新使用

  DrawDeferred().

  16. 替换CommandList

  CQikCommandManager& manager = CQikCommandManager::Static(*iCoeEnv);

  manager.DeleteFromCommandList(*this, R_QRREADERUI_MAINVIEW_COMMANDS);

  // add new commandlist

  const CCoeControl* control = manager.FindModelOwningClient(*this);

 manager.InsertIntoCommandListL(*control, *this, R_QRREADERUI_ADVIEW_COMMANDS);

  17. STRING to r:

  ^rls_string (STRING_r(_adview_[^ ]+)).*$

  RESOURCE TBUF R2 { buf = 1 ;}

  18. 创建可修改的字符串:

  HBufC *buf = HBufC::NewLC(MAX_SMS_BUFFER_LEGHT);

  TPtr bufPtr(buf->Des());

  19. 创建长度为0的TPtrC:

  TPtrC();

  20. Draw使用CCoeControl::SystemGc()获得GC,适用于所有控件。

  gc.Clear(Rect()) 清除控件显示区域。

  21. 不使用资源的初始化

  void CQHelloWorldView::ViewConstructL()

  {

  CQikCommandManager& cmdManager

  = CQikCommandManager::Static(*iEikonEnv);

  cmdManager.CreateCommandListL(*this);

  }

  22. 。您总是可以通过以下方式在CCoeControl 的继承类内启动redraw

  (重绘):(根据优先顺序)

  1. 通过调用Window().Invalidate(const TRect& aRect),将需要重绘的区域设

  成为无效(invalidate)。

  2. 通过调用DrawDeferred() 来安排一个全面的重绘。

  3. 通过调用DrawNow()立即绘图。

  23. 获得UI指针:

  CEikonEnv::Static()->EikAppUi()

  24. 检测文件首否存在

  BaflUtils::FileExists(iFsSession, aExistingBookFile)

  25. 创建图标:

  iEikonEnv->CreateIconL( KBarcodeWorkFileName,

  EMbmBarcodeworkAd_wap,EMbmBarcodeworkAd_wap_m );

  26. 格式化时间:

  _LIT(KDateFormat, "%04d/%02d/%02d %02d:%02d:%02d");

  TTime time;

  time.HomeTime();

  TDateTime dateTime = aTime.DateTime();

  dateTime.Format(KDateFormat,dateTime.Year(),dateTime.Month()+1,dateTime.Day()+1,

  dateTime.Hour(),dateTime.Minute(),dateTime.Second());

  27. listBox选中项:

  TInt selIndex = listBox->CurrentItemIndex();

  TInt selId = listBox->ItemIdL(selIndex);

  TInt selIndex = listBox->model().ItemIdIndex(selId);

      28. HBufC到DesC转换

  *iBuffer;

  29. 描述符的

  1。子串:

  TPtrC ptrc1 = bufc.Right(5);

  TPtrC ptrc2 = bufc.Mid(3,6);

  2。数组:

  TBufC<8> matchstr[7] = {*&KTxtMatchstr1, // "*World*"

  *&KTxtMatchstr2, // "*W?rld*"

  *&KTxtMatchstr3 // "Wor*"

  };

  3。设置长度:(最大长度不变,地址不变);

  buf.Zero();

  buf.SetLength(3);

  4。Append结果大于最大长度将引发Panic错误。

  5。动态内存:

  CBufFlat* flatBuf=CBufFlat::NewL(4);

  CleanupStack::PushL(flatBuf);

  flatBuf->SetReserveL(32);

  30. 常用Lib:

  estor.lib CFileStore // filestor

  edbms.lib RDbStoreDatabase // 数据库类

  31. HandleListBoxEventL中:

  EEventItemTapped: pen点击事件

  EEventItemConfirmed:Action键盘事件

  32. 清除容器内所有控件:

  iContainer->Controls().ResetAndDestroy();

  不能使用:

  iContainer->Controls().Reset();

  33. OpenUrl:

  void CNetworkService::OpenURIL( const TDesC& aAddr )

  {

  TVwsViewId id( KUidQWebApp, KUidQWebPageView );

  TQWebDNLUrlEntry obj;

  obj.iUrl = aAddr;

  TQWebDNLUrlEntryBuf buf(obj);

  CEikonEnv::Static()->EikAppUi()->ActivateViewL(id, KQWebCustomMsgId, buf);

  }

  34. 写文件:

  RFs fs = CEikonEnv::Static()->FsSession();

  //检测

  if( BaflUtils::FileExists(fs, aFileName) ) fs.Delete( aFileName );

  //创建,打开,替换

  RFile file;

  User::LeaveIfError(file.Create( fs, aFileName, EFileWrite));

  file.Write( aFileContent );

  file.Close();

  35. 动态缓存:(Using Dynamic Buffers)

  CBufBase,CBufFlat,CBufSeg;

  使用Size确定其大小。

  aBuf->Read(3,des,5); // puts "lo wo" into des.

aBuf->Write(6,KFolks);

  Compress() //压缩控件为最小

  36. 改变控件风格: 1. 继承控件,重载GetTextDrawer 2. 在父控件或视图中:

  void CHelloWorldView::GetTextDrawer(CCoeTextDrawerBase*& aTextDrawer, const CCoeControl* aDrawingControl) const

  {

  if(aDrawingControl==iLabel)

  {

  aTextDrawer->SetTextColor(KRgbRed); //将字体设为红色

  }

  }

  void CMyLabel::GetTextDrawer(CCoeTextDrawerBase*& aTextDrawer, const CCoeControl*/* aDrawingControl*/, TInt/* aKey*/) const

  { aTextDrawer->SetTextColor(KRgbRed); }

  37. 改变title图标:

  1. 获得Titlebar控件:

  MQikViewContext* mvc = ViewContext();

  CCoeControl* vc = &(mvc->AsControl());

  CCoeControl* titlebar = vc->Parent()->Parent()->Parent();

  2. 改变图标控件内容:

  if(titlebar!=NULL)

  {

  CEikImage* titlebaricon = static_cast(titlebar->ComponentControl(0));

  titlebaricon->SetContentL(KAnim);

  // bug: the anim is always lower than expected,

  }

  无bug版见:"Symbian积累"

  38. 使用计时器(-):

  iPeriodic = CPeriodic::NewL(0); // neutral priority

  iPeriodic->Start(KTickInterval,KTickInterval,TCallBack(Tick, this)); // Tick可以为成员方法

  TInt CHelloWorldView::Tick(TAny* aObject){ aObject->DoTick(); } // 计时器响应

  if(iPeriodic->IsActive())

  {

  iPeriodic->Cancel(); //取消

  }

  39. 抓屏:(抓屏.txt)

  40. 在非对话框的系统块中添加CEikEdwin控件不会自动弹出:

  CQikBuildingBlock* block = CQikBuildingBlock::CreateSystemBuildingBlockL(EQikCtCaptionedTwolineBuildingBlock);

  container->AddControlLC(block, 100);

  block->ConstructL();

  _LIT(KCaption,"Title above second edwin");

block->SetCaptionL(KCaption, EQikItemSlot1);

  CEikEdwin* edwin = new (ELeave) CEikEdwin();

  block->AddControlLC(edwin, EQikItemSlot2);

  edwin->ConstructL();

  edwin->SetUniqueHandle(ELabelStart);

  edwin->SetObserver(this);

  41. 删除控件:

  CCoeControl* qlbx = Controls().RemoveById(EMyListbox);

  if(qlbx) delete qlbx;

  42. 窗体坐标:

  每一个window都有一个坐标, 它的原点位置相对于其父窗体的的原点.如果其父窗体是一个window group, 它的位置相对于屏幕设备左

  上角,因为groups 没有尺寸大小。

  43. 字符串格式化:

  _LIT(KresultFormat, "%S"); // 必须为S

  resultMsg.Format(KresultFormat, &newName); // 取地址

  44. 异常抛出:

  User::Leave()后不用添加return。

  45. 时间格式化:

  TBuf<32> theTime;//存储转换后的时间

  TTime tt;

  tt.HomeTime();

  _LIT(KTimeFormat,"%Y%M%D%1-%2-%3 %H:%T:%S");//格式为:2006-03-04 12:12:12

  tt.FormatL(theTime,KTimeFormat);

  45. TBuf转Tint型

  TInt iNum1(123456789009876);// 15位数字

  iBuf.Num(iNum1); // 将缓存的内容设置为iNum1

  TLex iLex(iBuf); // 使用iBuf包含的内容创建TLex对象the 15 digit number

  TInt iNum2;

  iLex.Val(iNum2); //iNum2现在包含了15位数字

  /* 数据类型转换*/

  TBuf 转换为 TPtrC16

  TBuf<32> tText(_L("2004/11/05 05:44:00"));

  TPtrC16 tPtrSecond=tText.Mid(17,2);

  TPtrC16 转换为 TBufC16

  TPtrC16 tPtrSecond=tText.Mid(17,2);

  TBufC16<10> bufcs(tPtrSecond);

  TBufC16 转换为 TPtr16

  TBufC16<10> bufcs(tPtrSecond);

  TPtr16 f=bufcs.Des();

  TPtr16 转换为 TBuf

  TBuf<10> bufSecond;

  bufSecond.Copy(f);

  TBuf 转换为 TPtr16

  TBuf<10> bufSecond(_L("abc"));

TPtr16 f;

  f.Copy(bufSecond);

  TBuf 转换为 TInt

  TInt aSecond;

  TLex iLexS(bufSecond);

  iLexS.Val(aSecond);

  TInt 转换为 TBuf

  TBuf<32> tbuf;

  TInt i=200;

  tbuf.Num(i);

  UTF-8转换成UNICODE

  CnvUtfConverter::ConvertToUnicodeFromUtf8( iBuf16 , iBuf8 );

  UNICODE转换成UTF-8

  CnvUtfConverter::ConvertFromUnicodeToUtf8( iBuf8 , iBuf16 );

  将char串转换成symbian串

  char* cc = "aaaa";

  TPtrC8 a;

  a.Set( (const TUint8*)cc , strlen(cc) );

  46. 全局变量:

  template

  inline T* AppUi()

  {

  return static_cast(CEikonEnv::Static()->AppUi());

  }

  template

  inline T* Document()

  {

  return static_cast(CEikonEnv::Static()->EikAppUi()->Document());

  }

  template

  inline T* Application()

  {

  return static_cast(CEikonEnv::Static()->EikAppUi()->Application());

  }

  用法:

  CMyAppUi * p = AppUi();

  CMyDocument * p = Document();

  CMyApplicaton * p = Application();

  47. 描述符字串方法:

  Left,Right,Mid:中参数>=0. 长度超出时,取最长部分。

  48. 问题: // 使用以下方法无法插入数据

  RDbColWriteStream writeStream;

  writeStream.OpenL(table, KIndData); // writeStream.OpenLC(table, KIndData);

  writeStream.WriteL(aData); // writeStream.WriteL(aData);

  writeStream.Close(); // CleanupStack::PopAndDestroy(); // writeStream close

  而就没有问题:

  RDbColReadStream readStream; // A stream object for long columns

 readStream.OpenLC(tblHist, KIndData);

  readStream.ReadL(des, nLen);

  CleanupStack::PopAndDestroy(); //readStream

  49. DLL中加载资源

  //加入资源文件

  TFileName filename;

  TParse parse;

  parse.Set( CEikonEnv::Static()->EikAppUi()->Application()->AppFullName(), NULL, NULL);

  filename.Copy( parse.Drive() );

  filename.Append(KResPath);

  iResOffset = iEikonEnv->AddResourceFileL(filename);

  50. 使用While+错误标志位+全局变量 可以解决某些递归调用。

  51. XmlLib 在 xmlframework.lib

  使用Xml::MContentHandler时应该这样处理:

  -> 叶节点标签在Oncontent中处理。

  -> 其他节点在OnEndElementL中处理

  -> 使用如下的跳转表:

  struct TKeyWordPair

  {

  const TPtrC8 tag;

  TInt iType;

  TInt iParentType;

  };

  在OnStartElementL中:

  for (TInt i=0; i<>

  {

  if (tagName.CompareC(KKeyWords[i].tag) == 0)

  {

  iState = KKeyWords[i].iType;

  iParentSata = KKeyWords[i].iParentType;

  break;

  }

  }

  52. 换行符在symbian中为(0x0C),读取windows文件时会自动转换。

  XML解析时要跳过换行和空格。

  53. 将KLit转化为TDesC:使用operator(),不会出现临时变量。

  _LIT(KLit, "Hello world!");

  KLit().AllocL();

  54. 可以使用系统的KNullDesC(8,16)代替空字符串:

  _LIT(KNullDesC, "");

  55. iHeapBuffer = aDesC.AllocL();就可以搞定数据放入堆中。

  56. CArrayPtr::ResetAndDestroy() 他的子类:CArrayPtrFlat,CArrayPtrSeg 都可以使用。

  RPointerArray 也有此方法ResetAndDestroy()

  57. 内存检测标记:

  __UHEAP_MARK: 标记开始

  __UHEAP_MARKEND: 标记结束

  58. View模式: 次序有关,可以覆盖

 TQikViewMode viewMode;

  viewMode.SetStatusBar(EFalse); // 无状态条,电池的显示部分

  viewMode.SetAppTitleBar(EFalse); // 无标题,

  viewMode.SetButtonOrSoftkeyBar(EFalse); // 无工具条,按钮或菜单的显示部位

  viewMode.SetToolbar(EFalse); // 无??

  viewMode.SetFullscreen(); // 全屏,以上都没有

  SetViewModeL(viewMode);

  59. 检测内存:

  TInt ramf;

  HAL::Get(HALData::EMemoryRAMFree, ramf);

  60. DLL实现:

  头文件中: IMPORT_C static CInsCamera* NewLC();

  源文件中: EXPORT_C CInspiryCamera* CInspiryCamera::NewLC();

  61. 抽取Listbox的数据:

  MQikListBoxData* listBoxData = model.RetrieveDataL(0);

  CleanupClosePushL(*listBoxData);

  // ..

  CleanupStack::PopAndDestroy();

  或者:

  MQikListBoxData* listBoxData = model.RetrieveDataL(0);

  // ...

  listBoxData->Close();

  62. 将所有的换行符号换成f即可被CEikRichTextEditor识别为换行

  text->InsertL(text->DocumentLength(), CEditableText::ELineBreak);

  移动焦点:

  MoveCursorL (TCursorPosition::EFLineDown, EFalse);

  63. 删除CRichText时:

  delete aText->GlobalCharFormatLayer();

  delete aText->GlobalParaFormatLayer();

  delete aText;

  64. 遍历目录:

  iEikEnv->FsSession().GetDir(KSaveToDir, KEntryAttNormal, ESortNone, anEntryList);

  _LIT(KMdcMask, "c:/Data/*.mbc");

  TInt ret = aDir.Open(iEikEnv->FsSession(), KSaveToDir, KEntryAttNormal);

  65. 属性:

  临时对象,无名对象都是const

  66. 添加静态库:

  STATICLIBRARY DMDecoder_static.lib

  67. 内存对齐问题

  #ifdef __WINS__

  # pragma pack(push,2)

  #define PACKED

  #else

  #define PACKED __attribute__((packed))

#endif

  typedef PACKED struct tagBITMAPFILEHEADER{};

  68. SetExtent(TPoint(0,0), iQikAppUi.ClientRect().Size());

  并不可靠,特别是改变屏幕显示模式。可以使用CQikGridLayoutManager。

  CQikGridLayoutManager* gridlayout = CQikGridLayoutManager::NewLC();

  SetLayoutManagerL(gridlayout);

  CleanupStack::Pop(gridlayout);

  对于CQikViewDialog使用

  Page(ActivePageId())->SetLayoutManagerL(gridlayout);

  69. 直接创建独立的控件;

  iMyCtrl->ConstructL( KCameraContainerRect, &(iEikonEnv->RootWin()));

  70. 不同图片格式转换

  CFbsBitmap::Create(aSizeInPixels,aDispMode);创造一张灰色位图,如EGray16

  然后利用

  CFbsBitmapDevice以及CFbsBitGc,将原图绘制上去即可

  71. 修改视图标签:

  MQikViewContext* viewContext = ViewContext();

  viewContext->ChangeTextL(EContextViewText, viewContextText);

  72. 侦听application焦点切换from a server process?

  RWsSession ws;

  User::LeaveIfError(ws.Connect());

  CleanupClosePushL(ws);

  RWindowGroup wg(ws);

  User::LeaveIfError(wg.Construct(reinterpret_cast(&wg), EFalse));

  CleanupClosePushL(wg);

  wg.SetOrdinalPosition(-1); // hide the window

  groupwg.DefaultOwningWindow();

  wg.EnableReceiptOfFocus(EFalse);

  wg.EnableFocusChangeEvents(); // get ready to receive focus change events

  TRequestStatus status = KRequestPending;

  ws.EventReady(&status);

  User::WaitForRequest(status); // wait until the focus is changed

  CleanupStack::PopAndDestroy(); // wg

  TInt wgid = ws.GetFocusWindowGroup();

  CApaWindowGroupName* gn = CApaWindowGroupName::NewLC(ws, wgid);

  TUid uid = gn->AppUid(); // the uid of the focused app

  CleanupStack::PopAndDestroy(2); // gn, ws

if(uid==KUidCertainApp){

  // do something

  }

  73. CQikAppUi::BaseConstructL主要执行以下流程:

  CQikAppUi::CPimpl::CPimpl(CQikAppUi &)(CPimpl * const this=0x0739e7ac, CQikAppUi & aQikAppUi={...})

  CQikAppUi::CPimpl::ConstructL(CEikonEnv &)(CPimpl * const this=0xffffffff, CEikonEnv & aEnv={...})

  SkinManager::CreateL (0D9249D2h)

  SkinManager::AddThemeChangeObserverL (0D9249D8h)

  CQikCommandManager::CreateL(MQikCommandHandler &, CEikonEnv &)

  74. 第三方程序中无法使用相机快门键(EKeyCamera事件)

  #define EKeyCameraShutter 0xf883

  该键值的事件需要在window server中显式的请求:

  // Capture events from the camera shutter key (SwEvent capability required)

  iCameraKeyHandle = iCoeEnv->RootWin().CaptureKey( EKeyCameraShutter, 0, 0 );

  返回值iCameraKeyHandle(TInt32)可以用来取消该键捕捉请求,特别当退出程序时:

  if ( iCameraKeyHandle >= 0 )

  {

  iCoeEnv->RootWin().CancelCaptureKey( iCameraKeyHandle );

  }

  对焦键事件:半按下快门键将产生另一个不同的按键事件(对焦),可以通过下列scan code来检测该键的EEventKeyDown和EEventKeyUp事件:

  #define EStdKeyCameraFocus 0xe2

  75. 显示副标题:

  ViewContext()->AddTextL(0,_L("Hello Title2!"));

  76. 据说下面方法可以修改一个Application的所有视图皮肤:

  void OverrideSkinPatchL(TUid aSkinUid,

  TInt aPatchIndex,

  CWsBitmap *aSkinBitmap,

  TSkinDrawMode aSkinDrawMode,

  TMargins8 aDrawMargins);

  -> CQikWsBitmapBackground不支持masking. 建议继承MCoeControlBackground 自画 CWsBitmap with CWindowGc::DrawBitmapMasked.

  -> 另设置方式:

  CWsBitmap* iBkbitmap;

  CQikWsBitmapBackground* iWsbk;

  在View.cpp

  RWsSession WsSession;

  WsSession.Connect();

iBkbitmap = new(ELeave) CWsBitmap(WsSession);

  iBkbitmap->Load(KMBFileName,bitmapidfrombitmapfile,ETrue); //load return KErrNone

  iWsbk = CQikWsBitmapBackGround::NewL(iBkbitmap ,0);

  绘图方法中:

  CWindowGc& gc;

  gc.BitBlt(leftcornerpoint,iWsbk );

  -> const CSkinPatch& skin = SkinManager::SkinPatch(KSkinUidListBox, ESkinListBoxPopoutBackground, NULL);

  skin.DrawBitmap((CWindowGc&)*aGc,iOffScreenBitmap->SizeInPixels(), aRect);

  77. 如何获取软件版本:

  http://wiki.forum.nokia.com/index.php/%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E8%BD%AF%E4%BB%B6%E7%89%88%E6%9C%AC?

  ticket=ST-24289-ZQgm5ietVIvXLNbnwJIflsFChaHMzbyExd9-20

  1. MMP文件中增添

  LIBRARY sysutil.lib

  2. Include文件中增添

  #include

  3. 用法:

  a. GetSWVersion()返回手机固件软件版本信息的字符串。

  TBuf versionBuf;

  SysUtil::GetSWVersion(versionBuf);

  使用GetSWVersion()函数,我们看到的结果,和在拨号状态下输入*#0000#代码看到的结果是几乎一样的。例如:

  2.0618.06.05

  14-07-06

  RM-89

  (c)Nokia

  b. GetLangSWVersion()返回的软件版本是和当前手机的语言包兼容的。

  TBuf langSwVersionBuf;

  SysUtil::GetLangSWVersion(langSwVersionBuf);范例输出:

  2.0618.06.05_v12

  14-07-06

  RM-89

  (c)Nokia

  GetLangVersion()函数将会返回当前手机安装的语言包编号。

  TBuf langVersionBuf;

  SysUtil::GetLangVersion(langVersionBuf);Sample return:

  12

  78. 立即重画:

  // Draw view on demand

  void CImageAppView::DrawBitmapNow()

  {

CWindowGc& gc = SystemGc();

  gc.Activate(Window());

  Draw(Rect());

  gc.Deactivate();

  ControlEnv()->WsSession().Flush();

  }

  // Clear view

  void CImageAppView::Clear()

  {

  CWindowGc& gc = SystemGc();

  gc.Activate(Window());

  gc.Clear();

  gc.Deactivate();

  ControlEnv()->WsSession().Flush();

  }

  79. Re: CTextView如何设置透明? - 2007-03-07, 09:03

  1. 从MFormCustomDraw派生一个类,重写它的DrawBackground()方法,在该方法中绘制背景

  图片。注意,参数aParam的iDrawRect成员指定了本次重画的区域,应该画背景位图的对应

  区域。例如:

  aParam.iGc.DrawBitmap( aParam.iDrawRect, iBitmap, aParam.iDrawRect );

  2. 通过CTextView的CTextLayout对象的SetCustomDraw()方法,将该MFormCustomDraw派生类

  实例指针通知iLayout对象。我是在创建CTextView之前设置了CTextLayout实例的,不知道像

  CEikRichTextEditor这种对象能不能通过其Layout()获得CTextLayout指针并设置,因为我

  发现其函数定义是

  const CTextLayout* Layout() const;

  你可以自己去看看MFormCustomDraw的说明,这个类还有几个方法也挺有用的。

  80. 使用TBidiText绘制文本,可以在Symbian7以上使用

  const CFont *font = iEikonEnv->NormalFont();

  gc.UseFont(font);

  TBidiText *bidText = TBidiText::NewL(KLongText(), 50);

  CleanupStack::PushL(bidText);

  bidText->WrapText(Size().iWidth, *font, NULL);

  //TSize sz = bidText->MinimumSize()

  TPoint pt = aRect.iTl;

  pt.iY += font->HeightInPixels();

  bidText->DrawText(gc, pt, font->HeightInPixels());

  CleanupStack::PopAndDestroy(bidText);

  gc.DiscardFont();

  81.

  enum TTextEmphasis

  {

  ENoEmphasis =0x00, // 正常样式

  EPartialEmphasis =0x10, // 字体改变

  EFullEmphasis =0x20 // 字体和背景全部改变

  };

  82. 在S60管用,UIQ中不管用。

  iLabel->OverrideColorL( EColorLabelText, KRgbRed );

 

摘自 http://www.cnmsdn.com/html/201003/1268668320ID1996.html