`
javayestome
  • 浏览: 1040631 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Symbian 中各种提示、输入对话框的使用

阅读更多

1、非阻塞提示框

symbian定义了几个提示类,分别是:
confirm类:CAknConfirmationNote
info类: CAknInformationNote
warning类:CAknWarningNote
error类:CAknErrorNote

头文件:aknnotewrappers.h
lib: avkon.lib eikcdlg.lib eikctl.lib

Code:
TBuf<32> buf;
buf.Copy(_L("info note"));
CAknInformationNote* iInfoNote = new (ELeave) CAknInformationNote;
iInfoNote->ExecuteLD(buf);

2、阻塞提示框

void CEikonEnv::AlertWin(const TDesC& aMsg);
void CEikonEnv::AlertWin(const TDesC& aMsg1,const TDesC& aMsg2);
static void CEikonEnv::InfoWinL(const TDesC& aFirstLine,const TDesC& aSecondLine);

AlertWin为CEikonEnv类的非静态成员函数,InfoWinL为CEikonEnv类的静态成员函数。
AlertWin只能在ui、view和container中使用,使用方法如下:

Code:
iEikonEnv->AlertWin(_L("text"));

InfoWinL可以在任意类中使用,使用方法如下:
Code:
CEikonEnv::Static()->InfoWinL(_L("note:"), _L("text"));

为方便使用,常定义宏来使用这类提示框,如:

Code:
#define DEBUG_DIALOG(x) iEikonEnv->AlertWin(##x);
#define DEBUG_DIALOG1(x) CEikonEnv::Static()->InfoWinL(_L("note:"), ##x);
#define DEBUG_DIALOG2(x,y) CEikonEnv::Static()->InfoWinL(##x, ##y);

可以这么使用:
TBuf<32> buf;
buf.Copy(_L("test"));
DEBUG_DIALOG(buf);
DEBUG_DIALOG1(buf);
DEBUG_DIALOG2(buf,_L("text"));

此类提示框阻塞线程,只有用户按键退出提示框后,后面的程序才能接着运行。

3、进度条对话框

进度条对话框类为:
CAknProgressDialog
头文件:aknprogressdialog.h
lib:avkon.lib eikcdlg.lib eikctl.lib

Code:

//初始化进度条
CAknProgressDialog* iProgressDialog;
CEikProgressInfo* iProgressInfo;
iProgressDialog = new ( ELeave ) CAknProgressDialog( reinterpret_cast
<CEikDialog**>
( &iProgressDialog ) );
iProgressDialog->SetCallback( this );
iProgressDialog->PrepareLC( R_RESOURCE_PROGRESS_NOTE ); //从资源文件构造对话框,资源见下面的定义
iProgressInfo = iProgressDialog->GetProgressInfoL();
iProgressInfo->SetFinalValue( aMaxValue ); //设置进度条的最大值(结束值)
iProgressDialog->RunLD();

//更新进度条
iProgressInfo->IncrementAndDraw( aStep );

//结束进度条
iProgressDialog->ProcessFinishedL();
delete iProgressDialog;

RESOURCE DIALOG R_RESOURCE_PROGRESS_NOTE //进度条对话框资源
{
flags = EAknProgressNoteFlags;
buttons = R_AVKON_SOFTKEYS_CANCEL;
items =
{
DLG_LINE
{
type = EAknCtNote;
id = EMagicBoxCtrlIdProgressNote;
control = AVKON_NOTE
{
layout = EProgressLayout;
singular_label = "对话框中显示的文字";
plural_label = "download";
imagefile = AVKON_BMPFILE_NAME; //第二版中 图标文件为 #define AVKON_BMPFILE_NAME "z:\\system\\data\\avkon.mbm"
imageid = EMbmAvkonQgn_note_sml; //这两项可更改显示不同图标
imagemask = EMbmAvkonQgn_note_sml_mask;
};
}
};
}

注意:In Series 60 3rd edition, avkon.mbm was replaced by avkon2.mbm and moved to a different location (and the SDK forgot to mention this and still provides erroneous location).
Old entry:
imagefile = "z:\\system\data\avkon.mbm";
New entry:
imagefile = "z:\\resource\apps\avkon2.mbm";

4、等待对话框

等待对话框要用到的类:CAknGlobalNote
头文件:aknglobalnote.h
lib:aknnotify.lib eiksrv.lib

Code:

//显示等待对话框
CAknGlobalNote* globalNote = CAknGlobalNote::NewL();
CleanupStack::PushL( globalNote );
TInt iWaitNoteId = globalNote->ShowNoteL( EAknGlobalWaitNote, _L("对话框中显示的文字") );
CleanupStack::PopAndDestroy();

//结束等待对话框
CAknGlobalNote * note = CAknGlobalNote::NewL();
CleanupStack::PushL( note );
note->CancelNoteL( iWaitNoteId );
CleanupStack::PopAndDestroy();

注意:
CAknGlobalNote类除了显示等待对话框外还可显示多种类型的全局对话框,具体类型可通过ShowNoteL的第一个参数指定,可能的类型如下:


Code:

enum TAknGlobalNoteType
{
EAknGlobalInformationNote = 1,
EAknGlobalWarningNote,
EAknGlobalConfirmationNote,
EAknGlobalErrorNote,
EAknGlobalChargingNote,
EAknGlobalWaitNote,
EAknGlobalPermanentNote,
EAknGlobalNotChargingNote,
EAknGlobalBatteryFullNote,
EAknGlobalBatteryLowNote,
EAknGlobalRechargeBatteryNote,
EAknCancelGlobalNote,
EAknGlobalTextNote
};

5、询问对话框

询问对话框用到的类:CAknQueryDialog
头文件:AknQueryDialog.h
lib:avkon.lib

Code:

CAknQueryDialog* dlg;
dlg = CAknQueryDialog::NewL( CAknQueryDialog::ENoTone );
dlg->PrepareLC( R_RESOURCE_QUERY_DIALOG ); //从资源文件构造对话框,资源见下面的定义
TInt ret = dlg->RunLD(); //若用户选择“是”,返回非0,选择“否”,则返回0

RESOURCE DIALOG R_RESOURCE_QUERY_DIALOG //询问对话框资源
{
flags = EGeneralQueryFlags;
buttons = R_AVKON_SOFTKEYS_YES_NO; //CBA显示“是”和“否”两个按钮
items =
{
DLG_LINE
{
type = EAknCtQuery;
id = EGeneralQuery;
control = AVKON_CONFIRMATION_QUERY //表示这是confirm询问对话框,用户选择“是”或“否”
{
layout = EConfirmationQueryLayout;
label = "对话框中显示的文字";
};
}
};
}

此类对话框可以有声音提示,由NewL的const TTone& aTone参数指定,可能的值如下:

Code:

enum TTone {
/// No tone is played
ENoTone = 0,
/// A confirmation tone is played
EConfirmationTone = EAvkonSIDConfirmationTone,
/// A warning tone is played
EWarningTone = EAvkonSIDWarningTone,
/// An error tone is played
EErrorTone = EAvkonSIDErrorTone
};

通过定义不同的询问对话框资源,可实现不同的询问对话框,如让用户输入文字的询问对话框资源定义如下:

Code:

RESOURCE DIALOG R_RESOURCE_DATA_QUERY
{
flags = EGeneralQueryFlags;
buttons = R_AVKON_SOFTKEYS_OK_CANCEL; //CBA按钮显示“确定”和“取消”
items =
{
DLG_LINE
{
type = EAknCtQuery;
id = EGeneralQuery;
control = AVKON_DATA_QUERY //表示这是data询问对话框,需要用户输入内容
{
layout = EDataLayout;
label = "提示内容";
control = EDWIN
{
flags = EEikEdwinNoHorizScrolling | EEikEdwinResizable;
width = 30;
lines = 2;
maxlength = 159;
};
};
}
};
}

Code:

TBuf<128> msg;
CAknTextQueryDialog* dlg = new (ELeave) CAknTextQueryDialog(msg,CAknQueryDialog::ENoTone);
TInt ret = dlg->ExecuteLD(R_RESOURCE_DATA_QUERY);

用户输入内容后按“确定”,内容就存储到msg中,函数返回非0;按“取消”,函数返回0。

这里用到的类是CAknQueryDialog的子类CAknTextQueryDialog。
CAknQueryDialog的子类有:

Code:

CAknFloatingPointQueryDialog //This class should be used when user is reguest to enter a flotaing point number
CAknFixedPointQueryDialog //...
CAknDurationQueryDialog //This class should be used when user is reguest to enter duration
CAknIpAddressQueryDialog //This class should be used when user is reguest to enter IP address,@since 2.1
CAknMultiLineDataQueryDialog //Query Dialog with data input on more than one line (2 lines at the moment)
Create using NewL methods and passing parameters as appropriate.
Attention: When deriving from this class, you must call SetDataL during
second phase construction.
CAknMultiLineIpQueryDialog //...
CAknNumberQueryDialog //This class should be used when user is reguest to enter number
CAknTextQueryDialog //This class should be used when user is reguest to enter plain text, secret text, phonenumber or PIN-code
CAknTimeQueryDialog //This class should be used when user is reguest to enter time or date

使用不同的类,资源文件会有所不同。

另外,在资源中定义EDWIN时,可指定输入发,如:

Code:

control = EDWIN
{
flags = EEikEdwinNoHorizScrolling | EEikEdwinResizable;
width = 11;
lines = 1;
maxlength = 11;
avkon_flags = EAknEditorFlagFixedCase |
EAknEditorFlagNoT9 | EAknEditorFlagSupressShiftMenu; //EAknEditorFlagSupressShiftMenu屏蔽切换输入法键
allowed_input_modes = EAknEditorNumericInputMode;
default_input_mode = EAknEditorNumericInputMode;
numeric_keymap = EAknEditorPlainNumberModeKeymap;
};

以上写法表示默认输入法为数字,并且屏蔽了输入法切换键,即不能通过输入法切换键来切换输入法。


6、编辑框

编辑框使用的类:CEikGlobalTextEditor
头文件:eikgted.h

Code:

CEikGlobalTextEditor* iGKeyEd;
TBuf<128> iKeyText;
TResourceReader reader;
iCoeEnv->CreateResourceReaderLC( reader, R_RESOURCE_EDITOR ); //从资源文件构造编辑框,资源见下面的定义
iGKeyEd = new ( ELeave ) CEikGlobalTextEditor;
iGKeyEd->SetContainerWindowL( *this );
iGKeyEd->ConstructFromResourceL( reader );
CleanupStack::PopAndDestroy(); // Resource reader

//设置编辑框的初始文本和位置,编辑框大小在资源中定义
TBuf<32> buf;
buf.Copy(_L("demo"));
iGKeyEd->SetTextL(&buf);
iGKeyEd->SetExtent( TPoint(5,2), iGKeyEd->MinimumSize() );
iGKeyEd->SetFocus(ETrue);
// iGKeyEd->SetReadOnly(ETrue); //设置编辑框为只读

//使文字居中
CParaFormat paraFormat;
TParaFormatMask paraFormatMask;
paraFormatMask.SetAttrib( EAttAlignment ); // set mask
paraFormat.iHorizontalAlignment = CParaFormat::ECenterAlign;
iGKeyEd->ApplyParaFormatL( &paraFormat, paraFormatMask );

iGKeyEd->GetText(iKeyText); //获取编辑框中的内容,保存到iKeyText中

RESOURCE GTXTED R_RESOURCE_EDITOR //编辑框资源
{
flags = EAknEditorFlagDefault;
width = 53;
height = 16;
numlines = 1;
textlimit= 1;
fontcontrolflags = EGulFontControlAll;
fontnameflags = EGulNoSymbolFonts;

//这里也可设置输入法
// avkon_flags = EAknEditorFlagFixedCase |
EAknEditorFlagNoT9 | EAknEditorFlagSupressShiftMenu; //EAknEditorFlagSupressShiftMenu屏蔽切换输入法键
// allowed_input_modes = EAknEditorNumericInputMode;
// default_input_mode = EAknEditorNumericInputMode;
// numeric_keymap = EAknEditorPlainNumberModeKeymap;
}

注意,要使编辑框正常显示,记得更改container的CountComponentControls 和ComponentControl函数,正确处理控件数目和编辑框指针。另外,要使编辑框能正常接收按键事件,要显示调用编辑框的 OfferKeyEventL函数,如下:

Code:

TKeyResponse CMobileGuardSetKeyContainer::OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType )
{
return iGKeyEd->OfferKeyEventL( aKeyEvent, aType );
}


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/primer_programer/archive/2009/07/14/4347902.aspx

分享到:
评论

相关推荐

    Symbian OS课件(9)

    Symbian OS提供了多种对话框类型,如信息提示对话框、确认对话框、输入对话框等。 1. 对话框的种类:AknStandardDialog用于显示简单的信息或询问用户,而CAknQueryDialog则适用于收集用户输入。更复杂的对话框可以...

    Symbian自定义对话框类SimpleDlg

    在Symbian中,通常使用`CAknDialog`作为对话框的基础类,它是S60 UI框架的一部分,提供了基本的对话框管理功能。开发者可以通过继承`CAknDialog`并覆盖其方法,来定制对话框的外观和行为。 `CAknDialog`类提供了...

    S60_Platform_Avkon_UI_Resources_Dialogs

    - **Controls**:对话框中包含的各种控件。 - **Layout**:控件之间的布局方式。 - **Attributes**:控件的属性,例如背景颜色、字体等。 例如,以下是一个简单的对话框资源定义: ```xml DIALOG { Title: ...

    Symbian开发环境设置

    - 在弹出的对话框中选择项目类型为“Symbian 9”。 - 选择项目模板为“S60 3rd Ed. HelloWorld Application”。 - 在“Select SDKs”页面中勾选所需的SDK。 - 点击“Finish”。 4. **构建与运行项目** - 在...

    python for s60 1.44API函数手册英文版

    3. 创建单输入对话框: ```python result = appuifw.query(u"请输入内容:", "text") ``` `appuifw.query()`函数可以创建一个带有指定标签和类型的对话框,"text"表示文本输入类型。 这些只是Python for S60开发的...

    symbian 开发实例

    - 在 New Project 对话框中,选择 Symbian OS -&gt; Symbian OS C++ Project,然后点击 Next。 - 选择 S60 3rd Edition -&gt; 3th Ed. GUI application 模板,并继续点击 Next。 - 输入项目名称(例如:“first”),并...

    Nokia_UI_API_public_1_3_Javadoc.zip_Symbian j2me_nokia-ui_symbia

    它们使得应用能够提供更为丰富的交互体验,比如弹出式对话框用于提示用户,菜单用于展示多级操作选择,选项面板则能处理用户的选择确认或否定。 3. **布局管理**:在Symbian J2ME中,Nokia UI API提供了布局管理器...

    S60_Platform_Application_Framework_Handbook_v2_0_en.pdf

    对于简单的信息提示或单个输入字段的情况,可以直接使用对话框。而对于更复杂的交互,则可能需要结合其他架构一起使用。 #### 知识点四:视图架构 **何时使用视图架构** 视图架构适用于需要频繁切换视图的应用...

    诺基亚60系列用户界面样式指南

    S60系列是基于塞班(Symbian)操作系统的智能手机平台,曾经在全球范围内广泛流行,为用户提供了丰富的功能和定制化的用户体验。 该指南的核心内容可能包括以下几个方面: 1. **设计哲学**:诺基亚60系列用户界面...

    jQuery Mobile中文手册

    - **模态对话框**:一种特殊的页面,用于显示临时的信息或请求用户输入,常用于确认操作、提示消息等场景。 - **工具条**:包括顶部工具栏和底部工具栏,用于放置页面标题、导航按钮等元素。 - **标题容器**:用于...

    jQuery_Mobile中文手册.pdf

    - **模态对话框**:模态对话框是在页面上弹出的窗口,用于提示用户信息或获取用户输入。 - **工具条**:工具条通常位于页面顶部或底部,包含导航链接和其他常用功能。 - **标题容器**:用于显示页面标题或其他关键...

    UIQ3_ThemesCreationGuide

    4. **颜色方案**:定义了界面中使用的各种颜色,包括背景色、文字色等。 5. **皮肤**:皮肤是UI元素的视觉表现形式,包括按钮、菜单等的外观设计。 6. **壁纸**:用于背景展示,可以是静态图像或动态效果。 7. **...

    nokia s60 FP1 J2ME UI develop guide

    S60 用户界面是基于 Symbian 操作系统之上构建的一套统一的软件平台。它支持多种设备类型,包括智能手机和平板电脑。S60 UI 的设计考虑到了触摸屏和非触摸屏设备的不同需求,并且兼容多种输入方式,如键盘、导航键等...

    Android程序设计基础

    Android提供了对各种输入方法的支持,比如说键盘、触摸屏和轨迹球。用户界面可以针对任何屏幕分辨率和屏幕方向进行定制。  Android为用户与移动应用程序交互提供了全新的方式,同时也提供了实现这些交互的底层技术...

    wince的GPS模拟器

    双击面板:视双击的位置,按当前经纬度格式调出输入当前位置的对话框,或输 出1~3及Ozi选项 鼠标滚轮:转向(自由驾驶模式),或快进快退(航迹重播模式)。灵敏度可在 “选项-&gt;杂项”中定义,负值则反转方向 ...

Global site tag (gtag.js) - Google Analytics