您的位置:首页 > 其它

symbian 各种资源的定义

2008-07-23 19:36 267 查看
一、最基本的定义格式
/* Copyright (c) 2002, Nokia. All rights reserved */

NAME HELL  //资源的ID。在一个项目内保证无重复名称

#include <eikon.rh> //必须的一些内部结构和常量的定义
#include <eikon.rsg> //必须的一些内部结构和常量的定义
#include <avkon.rh> //必须的一些内部结构和常量的定义
#include <avkon.rsg> //必须的一些内部结构和常量的定义
#include "HelloWorld.hrh" //自定义的一些内部结构和常量的定义

// ---------------------------------------------------------

// 以下两个不许在任何程序中做任何修改
// This resource should be empty.

RESOURCE RSS_SIGNATURE { }

// Default Document Name

RESOURCE TBUF r_default_document_name { buf=""; }

// ---------------------------------------------------------

//标识菜单和快捷键的资源ID

RESOURCE EIK_APP_INFO
{
menubar = r_helloworld_menubar;
cba = R_AVKON_SOFTKEYS_OPTIONS_EXIT;
}

// ---------------------------------------------------------

// 定义菜单

RESOURCE MENU_BAR r_helloworld_menubar
{
titles =
{
MENU_TITLE {menu_pane = r_helloworld_menu;}
};
}

// ---------------------------------------------------------

// 定义子菜单

RESOURCE MENU_PANE r_helloworld_menu
{
items =
{
MENU_ITEM {command = EHelloWorldCommand1; txt = "Hello";},

//如果有子菜单,那么加入cascade = r_aknexlist_item_menu;这里

// RESOURCE MENU_PANE r_aknexlist_item_menu

MENU_ITEM {command = EAknSoftkeyExit; txt = "Exit";}
};
}

/*定义了字符串资源。虽然这里是小写。但是在程序中引用时必须全部大写。这个和symbian的编译器相关。他把rss的资源串编译到<SDK_installation_directory>/include路径下,成为rsg文件。而CPP实际上#include的是这个rsg文件。*/

RESOURCE TBUF32 r_hewb_command1_text { buf=qtn_hewb_command1_text; }

RESOURCE TBUF32 r_hewb_caption_string { buf=qtn_hewb_caption_string; }

// End of File

二、关于对话框的定义:
1、 定义一个对话框资源

//构造方式:

CMmssSendDialog* iSendDialog = new ( ELeave ) CMmssSendDialog;

iSendDialog->SetMopParent( this );

iSendDialog->ExecuteLD( R_MMSSEND_DIALOG );

//-------------------------------------------------------------------------------------------

RESOURCE DIALOG r_mmssend_dialog

{

flags = EEikDialogFlagNoDrag | // 无法拖曳

EEikDialogFlagNoTitleBar | //无标题栏

EEikDialogFlagFillAppClientRect | //将应用程序客户区填满

EEikDialogFlagCbaButtons | //使用CBA按钮

EEikDialogFlagModeless; //不接受按钮事件

//以上可以参见SDK :Developer Library ? API Reference ? C++ API reference ? UIKLAFGT

buttons = R_AVKON_SOFTKEYS_OPTIONS_EXIT;

form = r_mmssend_form;

}

// ---------------------------------------------------------

//默认的单行显示模式

// ---------------------------------------------------------

//可以设置为double行显示

RESOURCE FORM r_mmssend_form

{

flags = EEikFormEditModeOnly |

EEikFormUseDoubleSpacedFormat;

//Specify a style of form optionally. The default setting is single line display.
//1、EEikFormUseDoubleSpacedFormat : Double line display.
//2、EEikFormHideEmptyFields : To make empty data fields Invisible.
//3、EEikFormShowBitmaps : To display a bitmap on a label.
//4、EEikFormEditModeOnly : To display the form in edit mode only.

items =

{

DLG_LINE

{

type = EEikCtEdwin; //是一个编辑文本框 Editor window

//实际上这个是枚举类型,可参看SDK:

//Developer Library ? API Reference ? C++ API reference ? UIKLAFGT ? UIKLAFGT Resource Constants ? TEikStockControls

prompt = qtn_mmssend_recipient_prompt;// 这个控件的label显示的字符串

id = EMmsRecipientEditor;

control = EDWIN

{

flags = EEikEdwinNoHorizScrolling | EEikEdwinResizable;

width = qtn_mmssend_recipient_width;

maxlength = qtn_mmssend_recipient_maxlenght;

default_input_mode = EAknEditorNumericInputMode;//数字输入模式

};

},

DLG_LINE

{

type = EEikCtEdwin;

prompt = qtn_mmssend_subject_prompt;

id = EMmsSubjectEditor;

control = EDWIN

{

flags = EEikEdwinNoHorizScrolling | EEikEdwinResizable;

width = qtn_mmssend_subject_width;

maxlength = qtn_mmssend_subject_maxlenght;

default_input_mode = EAknEditorTextInputMode;//文本输入模式

};

}

};

}

三、定义AVKON_VIEW:
该类相当于新的view函数。

构造函数的承载

BaseConstructL( R_AKNEXLIST_VIEW_COLUMNVIEW );

//--------------------------资源-----------------------------------------------------

RESOURCE AVKON_VIEW r_aknexlist_view_columnview

{

menubar = r_aknexlist_menubar_main;

hotkeys = r_aknexlist_hotkeys;

}

四、定义LISTBOX:
构造LISTBOX:

1)

resourceId = R_AKNEXLIST_MENULIST_SINGLE_NUMBER_HEADING;

//可以用祖先 CEikFormattedCellListBox* iListBox;在类中先申明该对象。调用的使用可以根据需要创建需要的派生类。
listBox = new(ELeave)CAknSingleStyleListBox();

listBox->SetContainerWindowL( parent);
TResourceReader reader;
CEikonEnv::Static()->CreateResourceReaderLC(reader, aResourceId);
listBox->SetObserver(observer);
listBox->ConstructFromResourceL( reader );
CleanupStack::PopAndDestroy(); // resource stuffs.

2) CEikColumnListBox* iColListBox;
CEikFormattedCellListBox* iForListBox;

iColListBox = new (ELeave) CAknSingleStyleListBox();
iForListBox = new (ELeave) CAknDoubleGraphicStyleListBox();

iColListBox->SetContainerWindowL( *this );
iForListBox->SetContainerWindowL( *this );

//从资源文件中生成LISTBOX
TResourceReader reader;
CEikonEnv::Static()->CreateResourceReaderLC( reader, R_TEST_SINGLE);
iColListBox->ConstructFromResourceL( reader );

CEikonEnv::Static()->CreateResourceReaderLC( reader, R_TEST_DOUBLE);
iForListBox->ConstructFromResourceL( reader );

//设置SCROLLBAR
iColListBox->CreateScrollBarFrameL( ETrue );
iColListBox->ScrollBarFrame()->SetScrollBarVisibilityL(
CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto );

iForListBox->CreateScrollBarFrameL( ETrue );
iForListBox->ScrollBarFrame()->SetScrollBarVisibilityL(
CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto );

//适合窗口大小
iColListBox->SetRect(Rect());
iForListBox->SetRect(Rect());

//激活
iColListBox->ActivateL();
iForListBox->ActivateL();

//--------------------------样式一览参观-----------------------------------------------------------
// CAknDoubleStyleListBox

//CAknDoubleNumberStyleListBox();

//CAknDoubleLargeStyleListBox()

//CAknDoubleStyleListBox();

//CAknDoubleLargeStyleListBox();

//-----------------listbox属性-------------------------------------------------------

RESOURCE LISTBOX r_aknexlist_menulist_single_number_heading

{

array_id = r_aknexlist_item_single_number_heading;

flags = EAknListBoxMenuList;

}

RESOURCE ARRAY r_aknexlist_item_single_number_heading

{

items =

{

LBUF

{

txt = “item1”;

},

LBUF

{

txt = ”item2”;

},

LBUF

{

txt = ”item3”;

},

LBUF

{

txt = ”item4”;

},

LBUF

{

txt = ”item5”;

},

LBUF

{

txt = ”item6”;

}

LBUF

{

txt = ”item7”;

}

};

}

五、定义Tedit:
CEikLabel* iLabel2;//定义标签

CEikEdwin* iEdwin;//定义edit.

CEikGlobalTextEditor* iGTextEd;//定义基本上同edit

--------------------资源------------------------------------------

RESOURCE GTXTED r_aknexeditor_view1_gtexted

{

flags = EAknEditorFlagDefault;

width = qnn_aknexeditor_view1_gtexted_width;

height = qnn_aknexeditor_view1_gtexted_height;

numlines = qnn_aknexeditor_view1_gtexted_numlines;

textlimit= qnn_aknexeditor_view1_gtexted_textlimit;

fontcontrolflags = EGulFontControlAll;

fontnameflags = EGulNoSymbolFonts;

}

----------------------------------------------------------------------

iCoeEnv->ReadResource( text, R_AKNEXEDITOR_VIEW1_LABEL1);

------------------------------资源-------------------------------------------------------

RESOURCE TBUF32 r_aknexeditor_view1_label1

{

buf = qtn_aknexeditor_label_edwin;

}

--------------------------------------------------------------------------------------------------

iLabel2 = new ( ELeave ) CEikLabel;

iLabel2->SetContainerWindowL( *this ); //设置附着的容器

iLabel2->SetTextL( text );

iLabel2->SetExtent( GTEXTED_LABEL_POS, iLabel1->MinimumSize() );

TResourceReader reader;

iCoeEnv->CreateResourceReaderLC( reader, R_AKNEXEDITOR_VIEW1_EDWIN );

//将资源数据读入

iEdwin = new ( ELeave ) CEikEdwin;

iEdwin->SetContainerWindowL( *this );//设置附着的容器

iEdwin->ConstructFromResourceL( reader );

//将资源和iEdwin关联。

iEdwin ->SetExtent( position, iEdwin ->MinimumSize() );

// 其中TPoint position;设置主要的控件位置

// 以下是设置情况 Edwins

iEdwins->SetAknEditorCase( EAknEditorUpperCase );

//->SetAknEditorCase( EAknEditorLowerCase );

//->SetAknEditorCase( EAknEditorTextCase );

--------------------------资源----------------------------------------------------------------------

RESOURCE EDWIN r_aknexeditor_view1_edwin

{

flags = EAknEditorFlagDefault;

width = qnn_aknexeditor_view1_edwin_width;

lines= qnn_aknexeditor_view1_edwin_height;

maxlength = qnn_aknexeditor_view1_edwin_maxlength;

}

------------------------------------------------------------------------------------------------------------

CleanupStack::PopAndDestroy(); // Resource reader

iEdwin->SetExtent( EDWIN_POS, iEdwin->MinimumSize() );

iEdwin->SetFocus( ETrue );//设置控件的焦点。

六、字符串数组类:
CDesCArrayFlat* items =

iCoeEnv->ReadDesCArrayResourceL( R_AKNEXEDITOR_VIEW5_LABELS );

CleanupStack::PushL( items );

---------------------------资源定义---------------------------------------------------------

RESOURCE ARRAY r_aknexeditor_view5_labels

{

items =

{

LBUF { txt = qtn_aknexeditor_view5_label1; },

LBUF { txt = qtn_aknexeditor_view5_label2; },

LBUF { txt = qtn_aknexeditor_view5_label3; },

LBUF { txt = qtn_aknexeditor_view5_label4; },

LBUF { txt = qtn_aknexeditor_view5_label5; },

LBUF { txt = qtn_aknexeditor_view5_label6; }

};

}

七、如何控制多个面版(view)
1、 CAknNavigationControlContainer* iNaviPane;

CAknTabGroup* iTabGroup;

CAknNavigationDecorator* iDecoratedTabGroup;

CAknTitlePane* iTitlePane;

CAknExEditorScenarioManager* iScenarioManager;

TUid iCurrentViewId;

2、CEikStatusPane *sp = StatusPane();

iTitlePane =

static_cast<CAknTitlePane*>( sp->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) );

iNaviPane = ( CAknNavigationControlContainer* ) sp->ControlL(

TUid::Uid( EEikStatusPaneUidNavi ) );

iDecoratedTabGroup = iNaviPane->ResourceDecorator();

if ( iDecoratedTabGroup )

{

iTabGroup = ( CAknTabGroup* ) iDecoratedTabGroup->DecoratedControl();

}

// 屏幕管理器

iScenarioManager = new ( ELeave ) CAknExEditorScenarioManager;

3、各种VIEW后,加入调用

// Create and add views.

CAknExEditorView1* view1 = new ( ELeave ) CAknExEditorView1;

CleanupStack::PushL( view1 );

view1->ConstructL();

CleanupStack::Pop(); // view1

AddViewL( view1 ); //加入调用

CAknExEditorView4* view4 = new ( ELeave ) CAknExEditorView4;

CleanupStack::PushL( view4 );

view4->ConstructL();

CleanupStack::Pop(); // view4

AddViewL( view4 ); //加入调用

4、激活一个VIEW:

ActivateViewL( view1->Id() );

//-----------------------实现--------------------------

void CAknExEditorAppUi::ActivateViewL( TUid aViewId )

{

ActivateLocalViewL( aViewId );

iCurrentViewId = aViewId;

TBuf<KTitleBufLength> newTitle;

iScenarioManager->GetTitle( aViewId, &newTitle );

iTitlePane->SetTextL( newTitle );

}

5、实现前翻、后翻

void CAknExEditorAppUi::ActivateNextViewL()

{

TUid viewId = iScenarioManager->NextViewTo( iCurrentViewId );

if ( viewId == TUid::Uid( KScenarioNotFound ) )

{

viewId = iScenarioManager->FirstViewId();

}

ActivateViewL( viewId );

}

// ----------------------------------------------------

// CAknExEditorAppUi::ActivatePrevViewL()

// Activates previous view.

// ( other items were commented in a header ).

// ----------------------------------------------------

//

void CAknExEditorAppUi::ActivatePrevViewL()

{

TUid viewId = iScenarioManager->PrevViewTo( iCurrentViewId );

if ( viewId == TUid::Uid( KScenarioNotFound ) )

{

viewId = iScenarioManager->LastViewId();

}

ActivateViewL( viewId );

}

八、MCoeControlObserver接口:
这个接口可以直接派生出VIEW的容器类

class CAknExEditorContainer : public CCoeControl, McoeControlObserver

这种容器类可以在view的容器上嵌入相关的edit、label等组件。而不是用

GC来直接操作这些界面元素。

在view类中如何调用:

private:

void DoActivateL( const TVwsViewId& /*aPrevViewId*/,

TUid /*aCustomMessageId*/,

const TDesC8& /*aCustomMessage*/ );//创建容器类

void DoDeactivate();//删除容器类

CAknExEditorContainer1* iContainer;//-------------------implentment---------------------

void CAknExEditorView1::DoActivateL( const TVwsViewId& /*aPrevViewId*/,

TUid /*aCustomMessageId*/,

const TDesC8& /*aCustomMessage*/ )

{

iContainer = new ( ELeave ) CAknExEditorContainer1;

iContainer->SetMopParent( this );

iContainer->ConstructL( ClientRect() );

AppUi()->AddToStackL( *this, iContainer );

}

void CAknExEditorView1::DoDeactivate()
{

if ( iContainer )
{
AppUi()->RemoveFromStack( iContainer );

}

delete iContainer;

iContainer = NULL;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: