39
基基 S60 基 UI 基基基基

基于 S60 的 UI 组件编程

  • Upload
    nasya

  • View
    150

  • Download
    0

Embed Size (px)

DESCRIPTION

基于 S60 的 UI 组件编程. 主要内容. UI 组件概述 标签的使用 编辑器的使用 列表的使用 设置列表的使用 自定义组件的开发 对话框. UI 组件概述. 使用 CONE 支持组件技术 标签组件 编辑器 列表 对话框 自定义组件. 标签的使用. 标签类 CEikLabel 使用 在 Container 类的声明中 ,声明标签成员 CEikLabel* iLabel; 创建控件 iLabel = new (ELeave) CEikLabel; iLabel->SetContainerWindowL( *this ); - PowerPoint PPT Presentation

Citation preview

Page 1: 基于 S60 的 UI 组件编程

基于 S60 的 UI 组件编程

Page 2: 基于 S60 的 UI 组件编程

主要内容UI 组件概述标签的使用编辑器的使用列表的使用设置列表的使用自定义组件的开发对话框

Page 3: 基于 S60 的 UI 组件编程

UI组件概述使用 CONE 支持组件技术

标签组件编辑器列表对话框自定义组件

Page 4: 基于 S60 的 UI 组件编程

标签的使用标签类 CEikLabel 使用

在 Container 类的声明中 ,声明标签成员CEikLabel* iLabel;

创建控件iLabel = new (ELeave) CEikLabel;iLabel->SetContainerWindowL( *this );iLabel->SetTextL( _L("Example View") );

重载父类 CoeControl 的如下方法:TInt CountComponentControls() const;CCoeControl* ComponentControl(TInt aInde

x) const;

Page 5: 基于 S60 的 UI 组件编程

标签的使用使用

在 SizeChanged() 方法中,设置控件在容器中的位置和大小

void CControlExamContainer::SizeChanged()

{

iLabel->SetExtent( TPoint(10,10), iLabel->MinimumSize() );

}

Page 6: 基于 S60 的 UI 组件编程

编辑器的使用编辑器类别

文本编辑器数值编辑器 密码编辑器 多字段数值编辑器

Page 7: 基于 S60 的 UI 组件编程

编辑器的使用文本编辑器

类型无格式文本编辑器 全局文本编辑器 多格式文本编辑器

Page 8: 基于 S60 的 UI 组件编程

编辑器的使用文本编辑器

编辑器资源及控件类

Page 9: 基于 S60 的 UI 组件编程

编辑器的使用文本编辑器

无格式文本编辑器 CEikEdwin 的控件资源结构

STRUCT EDWIN

{

LONG flags=0;

WORD width=0;

WORD lines=1;

WORD maxlength=0;

AKN_EDITOR_EXTENSIONS

}

Page 10: 基于 S60 的 UI 组件编程

编辑器的使用文本编辑器

创建和使用编辑器控件——静态方式 1 )在程序资源文件定义资源

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;

}

Page 11: 基于 S60 的 UI 组件编程

编辑器的使用2 )在 Container 类中定义表示文本编辑器控件的成员变量指针

CEikEdwin* iEdwin;

Page 12: 基于 S60 的 UI 组件编程

编辑器的使用3 )创建文本编辑器控件,从资源初始化控件

TResourceReader reader;

iCoeEnv->CreateResourceReaderLC( reader, R_AKNEXEDITOR_VIEW1_EDWIN );

iEdwin = new ( ELeave ) CEikEdwin;

iEdwin->SetContainerWindowL( *this );

iEdwin->ConstructFromResourceL( reader );

CleanupStack::PopAndDestroy(); // Resource reader

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

Page 13: 基于 S60 的 UI 组件编程

编辑器的使用4 )实现下面的方法

TInt CountComponentControls() const;

CCoeControl* ComponentControl(TInt aIndex) const;

Void SizeChanged();

Page 14: 基于 S60 的 UI 组件编程

编辑器的使用文本编辑器

创建和使用编辑器控件——动态方式 创建控件和初始化控件的方式不同

iEdwinDynamic = new ( ELeave ) CEikEdwin;

iEdwinDynamic->ConstructL(0,8,15,1);

iEdwinDynamic->SetContainerWindowL( *this );

iEdwinDynamic->SetExtent( TPoint( 10, 100 ), iEdwinDynamic->MinimumSize() );

Page 15: 基于 S60 的 UI 组件编程

编辑器的使用文本编辑器

操作文本及属性 给编辑器设置初值

TBuf<20> buf;

buf.Append(_L("this is example"));

iGTextEd->SetTextL(&buf);

iEdwinDynamic->SetTextL(&buf);

获取编辑控件的内容TBuf<30> bufContent;

iEdwinDynamic->GetText(&bufContent);

iEdwin->SetTextL(&bufContent);

Page 16: 基于 S60 的 UI 组件编程

编辑器的使用文本编辑器

操作文本及属性 选择文本

// 得到选择的内容TCursorSelection pos = iEditor->Selection();

// 取得选中的文本CPlainText* text = iEditor->Text();

// 删除选中的文本text->DeleteL(pos.LowerPos(), pos.Length());

Page 17: 基于 S60 的 UI 组件编程

编辑器的使用文本编辑器

操作文本及属性 格式化文本

// 创建段落格式对象CParaFormat* pf = new (ELeave) CParaFormat();CleanupStack::PushL(pf);// 设置段落的对齐方式pf->iHorizontalAlignment = CParaFormat::ECenterAlign;// 创建段落格式掩码对象TParaFormatMask mask;// 设置 段落对齐属性将被改变mask.SetAttrib(EAttAlignment);// 应用段落格式到全局文本编辑器对象iEditor->ApplyParaFormatL(pf, mask);CleanupStack::Pop();

Page 18: 基于 S60 的 UI 组件编程

编辑器的使用数值编辑器

类型整数编辑器浮点数编辑器定点数编辑器

Page 19: 基于 S60 的 UI 组件编程

编辑器的使用密码编辑器

类型数字式密码编辑器 字母数字式密码编辑器

Page 20: 基于 S60 的 UI 组件编程

编辑器的使用多字段数值编辑器

Page 21: 基于 S60 的 UI 组件编程

列表的使用列表架构

Page 22: 基于 S60 的 UI 组件编程

列表的使用列表类型

选择列表多选列表可标记列表菜单列表

Page 23: 基于 S60 的 UI 组件编程

列表的使用列表资源

STRUCT LISTBOX

{

BYTE version;

WORD flags;

WORD height;

WORD width;

LLINK array_id;

}

Page 24: 基于 S60 的 UI 组件编程

列表的使用创建和使用列表

定义资源RESOURCE LISTBOX r_demo_listbox{ flags = EAknListBoxSelectionList; array_id = r_demo_listbox_items;}RESOURCE ARRAY r_demo_listbox_items{ items = { LBUF { txt = "Item1"; }, LBUF { txt = "Item2"; }, LBUF { txt = "Item3"; } };}

Page 25: 基于 S60 的 UI 组件编程

列表的使用创建和使用列表

创建列表// 创建一个列表实例CEikTextListBox* list = new (ELeave) CAknSingleStyl

eListBox();

// 给列表实例设置一个容器窗口list->SetContainerWindow(*this);

// 使用列表资源初始化资源读取器TResourceReader rr;

iEikonEnv->CreateResourceReaderLC(rr, R_DEMO_LISTBOX);

// 从资源构建列表,初始化列表list->ConstructFromResourceL(rr);

CleanupStack::PopAndDestroy(); // rr

Page 26: 基于 S60 的 UI 组件编程

列表的使用操作列表项

添加列表项// 从列表的数据模型获取列表项数组指针MDesCArray* textArray = list->Model()->ItemTextArra

y();CDesCArray* itemList = static_cast<CDesCArray*>(te

xtArray);// 构建一个新的列表项_LIT(KNewItem, "New item..");TBuf<32> item;item.Format(_L("\t%S\t\t"), &KNewItem); // 添加新的列表项值到列表项数组中itemList->AppendL(item);// 通知列表,列表项数据被改变了list->HandleItemAdditionL();

Page 27: 基于 S60 的 UI 组件编程

列表的使用操作列表项

删除列表项// 取得当前被选择列表项的索引TInt currentItem = list->Model()->CurrentItemIndex();// 从列表的数据模型取得列表项数据数组MDesCArray* textArray = list->Model()->ItemTextArra

y();CDesCArray* itemList = static_cast<CDesCArray*>(te

xtArray);// 删除当前被选择的列表项itemList->Delete(currentItem, 1);// 通知列表有列表项被删除,重新选择当前列表项AknListBoxUtils::HandleItemRemovalAndPositionHigh

lightL(list, currentItem, ETrue);// 重新绘制列表list->DrawNow();

Page 28: 基于 S60 的 UI 组件编程

设置列表的使用 设置列表是把应用的用户配置设置集中

到一个列表中 可用的设置列表项

音量控件 文本编辑器 滑块控件 枚举文本 时间编辑器 日期编辑器 IP 字段编辑器 二元开关 字母数字口令编辑器 数字口令编辑器

Page 29: 基于 S60 的 UI 组件编程

自定义控件的开发 开发过程

从 CCoeControl 类派生一个类作为控件类。 实现派生类的二阶段构造函数 ConstructL() 。 实现虚函数 Draw() ,提供绘制控件的代码。 实现虚函数 SizeChanged() ,在控件大小改

变时,重新布置、绘制控件。 实现虚函数 OffkeyEventL() ,提供处理键盘

事件

Page 30: 基于 S60 的 UI 组件编程

对话框 对话框的分类

标准对话框 窗体 通知 查询

Page 31: 基于 S60 的 UI 组件编程

对话框 标准对话框的使用

1. 定义对话框资源RESOURCE DIALOG r_input_name_dialog

{flags=EEikDialogFlagNoDrag |

EEikDialogFlagCbaButtons |EEikDialogFlagWait;

buttons=R_AVKON_SOFTKEYS_OK_CANCEL; items=

{DLG_LINE // 该行定义显示标签

{id=EDialogInputNameLabel; //

程序中使用此 ID 引用控件type=EEikCtLabel;// 控件类型control= LABEL

// 定义控件{};

},}

Page 32: 基于 S60 的 UI 组件编程

对话框 标准对话框的使用

2. 从 CAknDialog 类派生一个对话框类 class CInputNameDlg : public CAknDialog

{public:

static TBool RunDlgLD (TDes& aName);protected:

TBool OkToExitL(TInt aButtonId);void PreLayoutDynInitL();

private:CInputNameDlg(TDes& aName);

private: // 对话框数据TDes& iName;};

Page 33: 基于 S60 的 UI 组件编程

对话框 标准对话框的使用

3. 从 CAknDialog 类派生一个对话框类 class CInputNameDlg : public CAknDialog

{public:

static TBool RunDlgLD (TDes& aName);protected:

TBool OkToExitL(TInt aButtonId);void PreLayoutDynInitL();

private:CInputNameDlg(TDes& aName);

private: // 对话框数据TDes& iName;};

Page 34: 基于 S60 的 UI 组件编程

对话框 标准对话框的使用

4. 实现对话框类 的静态方法TBool CInputNameDlg::RunDlgLD (TDes& aPlayerNa

me)

{

CInputNameDlg* inputNameDialog =

new (ELeave) CInputNameDlg(aPlayerName);

return inputNameDialog->ExecuteLD(R_INPUT_NAME_DIALOG);

}

Page 35: 基于 S60 的 UI 组件编程

对话框 标准对话框的使用

5. 动态初始化对话框显示的数据 void CInputNameDlg::PreLayoutDynInitL()

{// 取得对话框中标签控件的指针,设置标签显示的提示信息CEikLabel* label = static_cast<CEikLabel*>

(ControlOrNull(EDialogInputNameLabel));if (label)

{TBuf<30> labelText;labelText.Append(_L("Input contact na

me"));label->SetTextL(labelText);}

}

Page 36: 基于 S60 的 UI 组件编程

对话框 标准对话框的使用

6. 保存和验证对话框数据 if(CInputNameDlg::RunDlgLD(iContactName))

{

CAknInformationNote* informationNote;

informationNote = new ( ELeave ) CAknInformationNote;

informationNote->ExecuteLD( iContactName);

}

Page 37: 基于 S60 的 UI 组件编程

对话框 通知的使用

简单的包装式通知

(1) (2)

(3) (4)

Page 38: 基于 S60 的 UI 组件编程

对话框 通知的使用

TBuf<50> noteContent;

noteContent.Append("Information Note");

CAknInformationNote* informationNote;

informationNote = new ( ELeave ) CAknInformationNote;

informationNote->ExecuteLD(noteContent);

Page 39: 基于 S60 的 UI 组件编程

对话框查询的使用