S60 3rd Edition
S60應用程序在前臺時,可以設置導航條顯示自定義圖標或文本。
首先,我們要獲得一個狀態欄的引用。然后可以從中獲得導航欄的引用。應用程序可以使用CAknNavigationDecorator類生成一個基于文本的Navi decorator對象。最后這個對象需要添加到導航欄中以便開始顯示:
//------------------------------------------------------------------------------
CAknNavigationControlContainer* iNaviPane = 0;
CAknNavigationDecorator* iNaviDecorator = 0;
//Get the reference of the status pane
CEikStatusPane *statusPane = iEikonEnv->AppUiFactory()->StatusPane();
if ( statusPane )
{
//Get the reference of the navi pane
iNaviPane=static_cast<CAknNavigationControlContainer*>(statusPane->ControlL(
TUid::Uid(EEikStatusPaneUidNavi)) );
//Create a Navi decorator object
iNaviDecorator= iNaviPane->CreateEditorIndicatorContainerL();
//Get the reference of the indicator container inside the NaviDecorator
CAknIndicatorContainer* indiContainer =
static_cast<CAknIndicatorContainer*>(iNaviDecorator->DecoratedControl());
if ( indiContainer && CEikStatusPaneBase::Current() )
{
TBuf<32> msgSize;
msgSize.Append(_L("Test")); // Text to be displayed
indiContainer->SetIndicatorValueL(
TUid::Uid( EAknNaviPaneEditorIndicatorMessageLength ), msgSize );
indiContainer->SetIndicatorState(
TUid::Uid( EAknNaviPaneEditorIndicatorMessageLength ),
EAknIndicatorStateOn);
}
//Push the object onto the navi pane.
iNaviPane->PushL( *iNaviDecorator );
}
//------------------------------------------------------------------------------
下面的這個示例代碼,演示了如何在導航欄中顯示一個圖標:
//------------------------------------------------------------------------------
CFbsBitmap* bitmap = NULL;
CFbsBitmap* mask = NULL;
CEikStatusPane* statusPane = iEikonEnv->AppUiFactory()->StatusPane();
CAknNavigationControlContainer* naviPane =
(CAknNavigationControlContainer*)statusPane->ControlL(
TUid::Uid(EEikStatusPaneUidNavi));
// Create an icon
AknIconUtils::CreateIconLC (bitmap, mask, KIconFile,
EMbmCarsvgCircle, EMbmCarsvgCircle_mask); //KIconFile is the .mif file
TSize size(30,30);
AknIconUtils::SetSize(bitmap, size); // Sets the size of the extracted image
//Create a Navi Decorator encapsulation for the image.
CAknNavigationDecorator* naviDecorator =
naviPane->CreateNavigationImageL(bitmap, mask);
//Push the image onto the navi pane.
naviPane->PushL(*naviDecorator);
//------------------------------------------------------------------------------
需要的頭文件及庫文件有:
#include <aknnavi.h> // for CAknNavigationControlContainer
#include <eikspane.h> // for CEikStatusPane
#include <aknnavide.h> // for CAknNavigationDecorator
#include <akniconutils.h> // for AknIconUtils
#include <aknindicatorcontainer.h> // for CAknIndicatorContainer
LIBRARY aknicon.lib
LIBRARY fbscli.lib
LIBRARY avkon.lib
注意:程序在前臺時這些導航欄上的文字和圖標才得以顯現,但手機待機時卻不會處理。