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
  ( &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( ?Format, 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 );
  }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值