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

转载 2007年10月06日 11:59:00
 

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;
                 };
             }
         };
     }

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 );
}

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

 转自sc_valentine21的专栏 1、非阻塞提示框symbian定义了几个提示类,分别是:confirm类:CAknConfirmationNoteinfo类: CAknInformation...
  • lius1984
  • lius1984
  • 2008年08月21日 11:40
  • 914

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

                  Symbian 中各种提示、输入对话框的使用                            1、非阻塞提示框                  symbia...
  • Max__Payne
  • Max__Payne
  • 2008年08月27日 17:18
  • 566

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

 1、非阻塞提示框symbian定义了几个提示类,分别是:confirm类:CAknConfirmationNoteinfo类: CAknInformationNotewarning类:CAknWar...
  • wistaria2002
  • wistaria2002
  • 2008年07月23日 20:17
  • 490

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

原文:http://www.cppblog.com/gtwdaizi/articles/35962.html 1、非阻塞提示框symbian定义了几个提示类,分别是:confirm类:CAknConf...
  • code09
  • code09
  • 2010年02月02日 09:35
  • 1116

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

 by  bodybo http://discussion.forum.nokia.com/forum/showthread.php?t=105774 1、非阻塞提示框symbian定义了几个提示类,...
  • flashtao613
  • flashtao613
  • 2009年03月31日 09:55
  • 428

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

1、非阻塞提示框symbian定义了几个提示类,分别是:confirm类:CAknConfirmationNoteinfo类: CAknInformationNotewarning类:CAknWarn...
  • fg313071405
  • fg313071405
  • 2010年03月23日 21:17
  • 223

『分享』各种提示、输入对话框的使用

1、非阻塞提示框symbian定义了几个提示类,分别是:confirm类:CAknConfirmationNoteinfo类: CAknInformationNotewarning类:CAknWarn...
  • meteor0627
  • meteor0627
  • 2008年05月09日 09:44
  • 584

QT学习 之 对话框 (二) 标准输入框

QInputDialog类参考 QInputDialog类提供了从用户那里得到一个单一值的简单方便的对话框。  #include qinputdialog.h> 继承了QDialog。 所有成...
  • u013007900
  • u013007900
  • 2015年01月25日 21:48
  • 4522

easygui简单消息框

条件: 1安装python2.7的PC 2下载easygui并解压至python的安装目录,我是在http://www.ferg.org/easygui/download.html下载的 3subli...
  • u011500019
  • u011500019
  • 2015年05月18日 20:35
  • 217

JS弹出输入对话框,使用window.prompt()

  script>        function doreg(){        var myDate = new Date();        var strDate=myDate.getFull...
  • zhangyj_315
  • zhangyj_315
  • 2009年03月13日 16:37
  • 13716
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Symbian 中各种提示、输入对话框的使用
举报原因:
原因补充:

(最多只允许输入30个字)