使用Carbide.vs与VS.NET2003构建Symbian开发平台-S60 平台(五)

简介:
原文地址:  http://www.360doc.com/content/070508/09/13049_487947.html
 

5.2 创建登陆框
 
            在这里我们要创建一个登陆框,用于生成用户名和密码的对话框,按照传统的Symbian OS C++开发,我们本来应该在HelloWorld.rss 里定义资源,但是有了Carbide.vs后我们却可以利用 Carbide.vs提供的功能非常方便地生成我们所要的资源,请打开 HelloWorld.rss 定位到文件的最后,点击右键->Add Fragment 将会出现Carbide.vs提供的生成资源窗口,在Template 处选择 S60 Multiline query dialog ,在下方会出现此对话框的效果图,就是我们所要的登陆框样子,按下一步,指定一个比较有效的名字,r_login_query ,最后按Finish生成资源,你将会发现HelloWorld.rss多了几行内容,这就是r_login_query的资源定义。

 RESOURCE DIALOG r_login_query {
  flags = EGeneralQueryFlags;
 buttons = R_AVKON_SOFTKEYS_OK_CANCEL;
 items = {
  DLG_LINE {
   type = EAknCtMultilineQuery;
   id = EMultilineFirstLine;
   control = AVKON_DATA_QUERY {
    layout = EMultiDataFirstEdwin;
    label = "Username:";
    control = EDWIN { maxlength = 8; };
   };
  },
  DLG_LINE {
   type = EAknCtMultilineQuery;
   id = EMultilineSecondLine;
   control = AVKON_DATA_QUERY {
    layout = EMultiDataSecondSecEd;
    label = "Password:";
    control = SECRETED { num_letters = 8; };
   };
  }
 };
}

 为了要让程序更通用,本地化起来,我们有必要将UserName与Password的值定义到.loc文件中,打开HelloWorld.loc文件,加入以下定义:
 
 
 #define qtn_username "UserName:"

 #define qtn_password "Password:"

  接下来我们来编写代码让这个登陆框显示出来,请打开HelloWorldView.h 先加下以下文件的引用

 #include <AknQueryDialog.h>
 #include <aknnotewrappers.h>
 #include <StringLoader.h> 
 #include "HelloWorld.hrh"

 再加入处理函数的声明
 
 void HandleLoginL();

 接着打开HelloWorld.loc 我们还要定义一些要显示的文本
 
 #define qtn_login_success "Congretulation You Have Loged in"

 #define qtn_login_fail "Sorry you have the wrong username or password"

 #define qtn_login_cancel "You have canceled the login"

 分别定义了登陆成功,登陆失败,与取消登陆的三种显示文本

 打开HelloWorld.rss文件,加入资源定义 
 
 RESOURCE TBUF r_login_success { buf = qtn_login_success; }

 RESOURCE TBUF r_login_fail { buf = qtn_login_fail; }

 RESOURCE TBUF r_login_cancel { buf = qtn_login_cancel; }

 这样我们就能在程序中动态装入这些资源了,继续打开HelloWorldView.cpp文件,实现HandleLoginL函数的定义


 void CHelloWorldView::HandleLoginL()
 {
     _LIT(KCorrectLogin,"bention");//定义正确的用户名
     _LIT(KCorrectPwd,"123456");//定义正确的密码

     //显示对话框
     TBuf<8> username(_L(""));
     TBuf<8> password(_L(""));
     CAknMultiLineDataQueryDialog* dialog=CAknMultiLineDataQueryDialog::NewL(username,password);//声明登陆对话框对象

     if (dialog->ExecuteLD(R_LOGIN_QUERY)) {//调用登陆对话框
         if (username.Compare(KCorrectLogin)==0 && password.Compare(KCorrectPwd)==0) {
       //登陆成功
       CAknConfirmationNote* note = new (ELeaveCAknConfirmationNote();//定义一个信息提示框
       HBufC* notePrompt=StringLoader::LoadLC(R_LOGIN_SUCCESS);//装载R_LOGIN_SUCCESS文本资源,以显示登陆成功信息
       note->ExecuteLD(*notePrompt);//打开对话框
       CleanupStack::PopAndDestroy(notePrompt);
    }
   else {
       //登陆失败
       CAknErrorNote* note = new (ELeaveCAknErrorNote();//定义一个错误提示框
       HBufC*  notePrompt=StringLoader::LoadLC(R_LOGIN_FAIL);//装载R_LOGIN_FAIL文本资源,以显示登陆失败信息
       note->ExecuteLD(*notePrompt);
       CleanupStack::PopAndDestroy(notePrompt);
   }
 }
 else {
      //取消登陆
      CAknWarningNote* note = new (ELeaveCAknWarningNote();//定义一个警告提示框
      HBufC* notePrompt=StringLoader::LoadLC(R_LOGIN_CANCEL);//装载R_LOGIN_CANCEL文本资源,以显示取消登陆警告信息
      note->ExecuteLD(*notePrompt);
      CleanupStack::PopAndDestroy(notePrompt);
  }
 }

 接下去我们还差啥?就差把HandleLoginL放在处理菜单命令的函数中了,定位到HandleCommandL 中,HandleCommandL 是用来专门处理事件的,我们在switch结构中加入
 case EHelloWorldCmdLogin:
  {
   HandleLoginL();
   break;
  }
 其中的EHelloWorldCmdLogin 就是我们的登陆按钮啦,这样就实现了当我们点击了Login按钮后就会调用HandleLoginL去做相应的处理。


本文转自peterzb博客园博客,原文链接:http://www.cnblogs.com/peterzb/archive/2009/06/11/1501594.html ,如需转载请自行联系原作者。


目录
相关文章
|
30天前
|
数据采集 存储 监控
.NET智慧手术室管理平台源码
术前访视记录单、手术风险评估表、手术安全核查表、自费药品或耗材、麻醉知情同意书、麻醉记录单、分娩镇痛记录单、麻醉复苏单、术后镇痛记录单、术后访视记录单、压伤风险评估量表、手术清点记录单、护理记录单、输血护理记录单。
31 0
|
1月前
深入.net平台的分层开发
深入.net平台的分层开发
63 0
|
4月前
|
Web App开发 开发框架 .NET
asp.net基于WEB层面的云LIS系统平台源码
结合当今各检验科管理及实验室规模的不同状况,充分吸收当今IT科技的最新成就,开发出以高度产品化、功能强大、极易实施操作、并不断升级换代为主要特点的LIS系统。彻底解决检验科的信息孤岛,全面实现全院信息互通互联、高度共享,并为检验科的规范化管理提供了有力工具。
41 0
|
4月前
|
Web App开发 开发框架 .NET
asp.net基于WEB层面的区域云LIS系统平台源码
asp.net基于WEB层面的区域云LIS系统平台源码
49 1
|
4月前
|
开发框架 小程序 数据可视化
基于.NET、Uni-App开发支持多平台的小程序商城系统 - CoreShop
基于.NET、Uni-App开发支持多平台的小程序商城系统 - CoreShop
|
5月前
|
存储 前端开发 程序员
一款基于.Net开发、开源、支持多平台云存储文件管理器
一款基于.Net开发、开源、支持多平台云存储文件管理器
42 0
|
5月前
|
数据采集 自然语言处理 监控
基于.Net开发的、支持多平台、多语言餐厅点餐系统
基于.Net开发的、支持多平台、多语言餐厅点餐系统
76 0
|
10月前
|
SQL 数据库连接 数据库
在VS2013平台下,用VB.net 连接Access数据库
从开始学习计算机,我们使用的一直是SQL数据库。这次接触了Access数据库,我将从Access创建到连接向大家分享一下我在Access数据库中的收获。
205 0
|
11月前
|
分布式计算 NoSQL Java
1..Net平台历程介绍和.net framework和netcore的架构体系对比,以及框架的选择介绍
1..Net平台历程介绍和.net framework和netcore的架构体系对比,以及框架的选择介绍
174 0
|
缓存 前端开发 JavaScript
采用.Net Core技术框架开发的医院云LIS平台源码,B/S架构
基于B/S架构的医学实验室检验系统源码,整个系统的运行基于WEB层面,只需要在对应的工作台安装一个浏览器软件有外网即可访问。全套系统采用云部署模式,部署一套可支持多家医院检验科共同使用。 采用.Net Core新的技术框架、DEV报表、前端js封装、分布式文件存储、分布式缓存等,支持LIS独立部署,Docker部署等多种方式。