WAP之家:为您提供最全最新的WAP技术,CP.SP.3G等行业资讯。 WAP之家交流论坛全新开放 点击进入>>
WAP资讯 | 3G动态 | SP动态 | 运营商动态 | 内容商动态 | 制造商动态 | 论坛讨论>> 每次自动访问
WAP技术 | WAP源码 | 手机编程 | 手机源码 | 无线技术 | J2ME技术 | 手机软件 添加到收藏夹
IVR技术 | SP资料 | SMS MMS技术 | 商业方案 | IVR下载 | 书籍教程 | 工具软件 语言:繁體中文

WAP之家技术文章手机编程Symbian基础知识使用Carbide.vs与VS.NET2003构建Symbian开发平台-S60 平台

使用Carbide.vs与VS.NET2003构建Symbian开发平台-S60 平台
作者:CSDN  来源:CSDN  发布时间:2006-11-30 22:10:31
ogin其实就是对应了菜单项 "Login"

 程序的菜单资源定义在了 HelloWorld.rss 文件中,我们打开这个文件,找到以下的定义
 
RESOURCE MENU_PANE r_helloworld_app_menu
    {
    items =
        {
        MENU_ITEM { command = EHelloWorldCmdAppTest; txt = qtn_appl_option_item; },
        MENU_ITEM { command = EAknCmdExit; txt = qtn_appl_exit; }
        };
    }

 把EHelloWorldCmdAppTest 替换成EHelloWorldCmdLogin,再把qtn_appl_option_item替换成qtn_view1_login_item ,这样我们就把程序选项菜单的第一项替换成 "Login" 了。

 

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 (ELeave) CAknConfirmationNote();//定义一个信息提示框
       HBufC* notePrompt=StringLoader::LoadLC(R_LOGIN_SUCCESS);//装载R_LOGIN_SUCCESS文本资源,以显示登陆成功信息
       note->ExecuteLD(*notePrompt);//打开对话框
       CleanupStack::PopAndDestroy(notePrompt);
    }
   else {
       //登陆失败
       CAknErrorNote* note = new (ELeave) CAknErrorNote();//定义一个错误提示框
       HBufC*  notePrompt=StringLoader::LoadLC(R_LOGIN_FAIL);//装载R_LOGIN_FAIL文本资源,以显示登陆失败信息
       note->ExecuteLD(*notePrompt);
       CleanupStack::PopAndDestroy(notePrompt);
   }
 }
 else {
      //取消登陆
      CAknWarningNote* note = new (ELeave) CAknWarningNote();//定义一个警告提示框
      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去做相应的处理。

 好了编译一下,我顶,又出错,呵呵,别急,你还得在项目里引入  commonengine.lib 文件呢,具体做法与 引入fbscli.lib 文件一样,记得要跟fbscli.lib之间隔开一个空格哟。
 
 好了,大功告成,现在再次编译,成功,运行,打开软件,点击Login菜单项,输入,是不是成功了?兴奋?郁闷?

       现在我们的程序全都是英文的,或许有人会问我为什么不用中文的啊,比如UserName为什么不写成用户名?呵呵,说实在的,我蛮懒 的,因为我们不能直接在资源文件里直接定义一个中文文本,在我写的文章中有一篇关于在Symbian中如何显示中文的文章, 关于SymbianSeries 60开发的中文显示问题 有兴趣的可以查看 ,按照文章的步骤去做相应的修改后你的程序就直接显示中文啦。至此,本文的实战代码也到一段落了。

6.导入已有的Symbian os c++项目

 利用

上一页  [1] [2] [3] [4]  下一页

[] [返回上一页] [打 印]
文章评论

用户名: 查看更多评论

分 值:100分 85分 70分 55分 40分 25分 10分 0分

内 容:

         (注“”为必填内容。) 验证码: 验证码,看不清楚?请点击刷新验证码