二、基本程序结构
来源:互联网 发布:java人事管理系统 编辑:程序博客网 时间:2024/04/30 08:27
1、一个symbian OS GUI应用程序,必须实现四个类:
·应用程序类:应用程序类用于定义应用程序的属性,还用于生成新的空白文档。传递UID信息。
·文档类:表示应用程序的数据模式。负责保存和恢复应用程序的数据,创建应用程序的用户UI接口
·应用程序UI接口类:该类是完全不可见的,他创建一个应用程序视图,并且处理菜单等32位命令的响应手段。
·应用程序视图类:这是一个具体的控件类。他的目的是在屏幕上显示应用程序数据,并允许用户交互。
2、从helloworld开始理解symbian:
工程文件
Example Applications >> helloworldbasic.mmp
helloworldbasic.mmp
/* Copyright (c) 2004, Nokia. All rights reserved */
TARGET HelloWorldBasic.app
TARGETTYPE app
// Change the second number here to change the UID for this application
UID 0x100039CE 0x10005B91
TARGETPATH /system/apps/helloworldbasic
SOURCEPATH ../src
SOURCE HelloWorldBasic.cpp
SOURCE HelloWorldBasicApplication.cpp
SOURCE HelloWorldBasicAppView.cpp
SOURCE HelloWorldBasicAppUi.cpp
SOURCE HelloWorldBasicDocument.cpp
SOURCEPATH ../data
RESOURCE HelloWorldBasic.rss //菜单,字符串,数组等资源
RESOURCE HelloWorldBasic_caption.rss //主要是程序显示的标题和名称
USERINCLUDE ../inc //用户头文件目录
SYSTEMINCLUDE /epoc32/include //系统头文件目录
LIBRARY euser.lib
LIBRARY apparc.lib
LIBRARY cone.lib
LIBRARY eikcore.lib
LIBRARY avkon.lib
LIBRARY commonengine.lib
LANG SC
AIF HelloWorldBasic.aif ../aif HelloworldBasicAif.rss c12 qgn_menu_demo_cxt.bmp qgn_menu_demo_cxt_mask.bmp qgn_menu_demo_lst.bmp qgn_menu_demo_lst_mask.bmp
// End of File
====================================
TARGET HelloWorldBasic.app 代表生成的目标
TARGETTYPE app 代表生成类型
UID:每个程序必须有自己唯一的UID。如果要发表软件,必须获得UID。可以发email:uid@symbiandevnet.com ,标题为“UID request”,写明将请求多少个UID(第一次请求8个比较合理)在24小时内,将获得全球唯一的UID号码。
DLL启动代码:
Example Applications >> Hello World Basic Example
/* Copyright (c) 2002, Nokia. All rights reserved */
#include "HelloWorldApplication.h"
// DLL entry point, return that everything is ok
GLDEF_C TInt E32Dll(TDllReason /*aReason*/)
{
return KErrNone;
}
// Create an application, and return a pointer to it
EXPORT_C CApaApplication* NewApplication()
{
return (new CHelloWorldApplication);
}
NewApplication()是一个应用程序的建构类,通过他返回应用程序类。E32Dll()是一个例行公事的函数。只要每次照样宣称就可以了。他调用了DLL的入口。
应用程序类
Example Applications >> Hello World Basic Example
/* Copyright (c) 2002, Nokia. All rights reserved */
#ifndef __HELLOWORLD_APPLICATION_H__
#define __HELLOWORLD_APPLICATION_H__
#include <aknapp.h>
class CHelloWorldApplication : public CAknApplication
{
public: // from CAknApplication
TUid AppDllUid() const;//传递UID信息
protected: // from CAknApplication
CApaDocument* CreateDocumentL();//创建了默认文档类
};
#endif // __HELLOWORLD_APPLICATION_H__
这个类主要完成了两件事情:
(1)他传递了应用程序功能的一些信息,包括其UID。这个验证会作为最后对DLL完整性的检查。
(2)充当了文档生成器。
文档类
#ifndef __HELLOWORLD_DOCUMENT_H__
#define __HELLOWORLD_DOCUMENT_H__
#include <akndoc.h>
// Forward references
class CHelloWorldAppUi;//类的向前使用,这种手法注意学习
class CEikApplication;
class CHelloWorldDocument : public CAknDocument
{
public:
static CHelloWorldDocument* NewL(CEikApplication& aApp); //用于二阶段构造
static CHelloWorldDocument* NewLC(CEikApplication& aApp);//用于二阶段构造
~CHelloWorldDocument();
public: // from CAknDocument
CEikAppUi* CreateAppUiL();//创造应用程序UI类
private:
void ConstructL();//用于二阶段构造
CHelloWorldDocument(CEikApplication& aApp);//自身构造函数
};
#endif // __HELLOWORLD_DOCUMENT_H__
文档类是真正开始有实际意义的代码。这个例子由于没有涉及文件的操作,所以仍然显得多余。但是以后我们会发现,这种分类是非常巧妙的。
应用程序类
Example Applications >> Hello World Basic Example
#ifndef __HELLOWORLD_APPUI_H__
#define __HELLOWORLD_APPUI_H__
#include <aknappui.h>
// Forward reference
class CHelloWorldAppView;
class CHelloWorldAppUi : public CAknAppUi
{
public:
void ConstructL();//二阶段构造之用
CHelloWorldAppUi();
~CHelloWorldAppUi();
public: // from CAknAppUi
void HandleCommandL(TInt aCommand);//接受32位命令ID,并分配相对应操作。
private:
CHelloWorldAppView* iAppView;
};
#endif // __HELLOWORLD_APPUI_H__
对应的CPP文件下有:
// handle any menu commands
void CHelloWorldAppUi::HandleCommandL(TInt aCommand)
{
switch(aCommand)
{
case EEikCmdExit:
case EAknSoftkeyExit:
Exit();
break;
case EHelloWorldCommand1:
{
_LIT(message,"Hello!");
CAknInformationNote* informationNote = new (ELeave) CAknInformationNote;
informationNote->ExecuteLD(message);
}
break;
default:
Panic(EHelloWorldBasicUi);//相当于忽略,什么也不做。
break;
}
}
=========================================
现在看看这个命令ID是在哪里定义的?
命令常量首先要在*.hrh中定义:
enum THelloWorldBasicIds
{
EHelloWorldBasicCommand1 = 1 // start value must not be 0
};
*.rss中定义:
RESOURCE MENU_BAR r_helloworldbasic_menubar
{
titles =
{
MENU_TITLE { menu_pane = r_helloworldbasic_menu; }
};
}
//定义子级目录:
RESOURCE MENU_PANE r_helloworldbasic_menu
{
items =
{
MENU_ITEM
{
command = EHelloWorldBasicCommand1;
txt = qtn_hewb_command1;
},
MENU_ITEM
{
command = EAknSoftkeyExit;
txt = qtn_hewb_exit;
}
};
}
关于字符串的预定义在helloworldbasic.loc中。
现在我们来理解一下helloworldbasic.rss:
Series 60 2nd Edition SDK for Symbian OS, Supporting Feature Pack 2
Example Applications >> Hello World Basic Example
/* Copyright (c) 2002, Nokia. All rights reserved */
NAME HELL //资源的ID。在一个项目内保证无重复名称
#include <eikon.rh>//必须的一些内部结构和常量的定义
#include <eikon.rsg>//必须的一些内部结构和常量的定义
#include <avkon.rh>//必须的一些内部结构和常量的定义
#include <avkon.rsg>//必须的一些内部结构和常量的定义
#include "HelloWorld.hrh"//自定义的一些内部结构和常量的定义
// ---------------------------------------------------------
// 以下两个不许在任何程序中做任何修改
// This resource should be empty.
RESOURCE RSS_SIGNATURE { }
// Default Document Name
RESOURCE TBUF r_default_document_name { buf=""; }
// ---------------------------------------------------------
//标识菜单和快捷键的资源ID
RESOURCE EIK_APP_INFO
{
menubar = r_helloworld_menubar;
cba = R_AVKON_SOFTKEYS_OPTIONS_EXIT;
}
// ---------------------------------------------------------
// 定义菜单
RESOURCE MENU_BAR r_helloworld_menubar
{
titles =
{
MENU_TITLE {menu_pane = r_helloworld_menu;}
};
}
// ---------------------------------------------------------
// 定义子菜单
RESOURCE MENU_PANE r_helloworld_menu
{
items =
{
MENU_ITEM {command = EHelloWorldCommand1; txt = "Hello";},
MENU_ITEM {command = EAknSoftkeyExit; txt = "Exit";}
};
}
/*定义了字符串资源。虽然这里是小写。但是在程序中引用时必须全部大写。这个和symbian的编译器相关。他把rss的资源串编译到<SDK_installation_directory>/include路径下,成为rsg文件。而CPP实际上#include的是这个rsg文件。*/
RESOURCE TBUF32 r_hewb_command1_text { buf=qtn_hewb_command1_text; }
RESOURCE TBUF32 r_hewb_caption_string { buf=qtn_hewb_caption_string; }
// End of File
- 二、基本程序结构
- 基本程序结构
- MIDlet的基本程序结构
- 基本的Direct3D程序结构
- 第十四课 基本程序结构
- cppTest-0:基本程序结构
- C#基本程序结构
- Go基础-基本程序结构
- [MFC]MFC程序结构(二)
- 简简单单---- (二)jsp程序结构
- 程序结构&&程序设计(二)
- Oracle12C--程序结构(二十八)
- C#程序结构及基本语法
- 程序结构
- 程序结构
- C#笔记(3)---基本语法[程序结构]
- OpenGL基础图形编程 - OpenGL基本程序结构
- OpenGL基础图形编程 - OpenGL基本程序结构
- 《Java与模式》学习笔记之三-----装饰(Decorator)模式
- 在Visual C++调试器中显示Symbian字符串和描述符
- 一、编译命令
- VC 6.0“Compiling... ,Error spawning cl.exe”错误解决
- JPEG格式和代码的搜索资料共享
- 二、基本程序结构
- [收藏]Using Mozilla in testing and debugging web sites
- U盘问题!
- 测试
- 一步步教你利用微软的服务创建自己的域名邮箱
- 用Dom4j解析XML及中文问题
- XSL-FO 高级技术2
- Java学习从入门到精通[转]
- eval函数的用法