一个应用程序,展示如何模拟手机!






2.23/5 (21投票s)
2003 年 7 月 29 日
6分钟阅读

62598

719
这个应用程序只是一个简单的模拟器,但它的能力是你可以轻松地为你的手机添加更多属性,并且界面和源代码是分开的,所以你可以以很低的成本改变界面!!!
第一个对话框截图
手机主人截图
拨号器截图
引言
大多数人可能会觉得模拟器毫无价值,纯粹是浪费时间。但对于这些人,我应该说模拟器实际上并不是一项简单的工作,它需要大量的经验和能力,这在不同的项目中会有所不同。这个程序只是一个项目,其目的是展示作者在OOP和高级编程其他特殊主题(如使用STL的异常处理等)方面的能力。另一方面,它也可以用于教育目的,许多用户或许多初级程序员需要一些资源来解决他们的新问题。所以这个项目可以作为这些人的一个很好的资源。
这个项目是一个简单手机的模拟器,它具有以下功能
- 通话记录菜单
- 电话簿菜单
- 设置菜单
- 消息菜单
请注意,该程序的结构允许您为这款手机添加任何其他功能。
由于此程序(MS)是一个模拟器,所以我应该启用所有简单的操作并正确模拟它们,例如手机主人发送消息或打电话给某人,或者从其他人接收消息。因此,当您启动MS时,会出现一个中间对话框,询问您是要成为手机主人还是拨号器。第一个对话框有5个文本框,手机主人只需填写其中2个,而拨号器则需要填写所有文本框。第一个和第二个字段是运行MS(作为手机主人)的计算机的IP和PORT,请注意,此处使用IP和PORT只是为了模拟真实手机的这一特性:它们可以通过电缆或卫星呼叫其他人,而我们这里的电缆或远程设备只是一个Socket。如果拨号器输入与手机主人相同的IP和PORT,那么他们可以通过通话或发送消息相互连接。
关于主要类
该项目由VC++6编写,包含许多不同的类。其中一些只是MS界面中使用的实用类,但其中一些是关键类,项目的基础就建立在它们之上。
关键类是
- Scr
- BtZero
- BtOne
- BtTwo
- BtThree
- BtFour
- BtFive
- BtSix
- BtSeven
- BtEight
- BtNine
- BtStar
- BtSquar
- BtOk
- BtCancel
- BtUp
- BtDown
- BtLeft
- BtRight
- BtDial
- BtCancel
以上所有类实际上都是手机主要部分的构建者。例如屏幕或键盘上的任何按键,如按钮一、确定按钮等。
所有上述类中最重要的是第一个“Class Scr”,它处理我其中定义的所有动作。这个类有一些定义的动作,你可以在“Scr.h”文件中看到它们。我自己添加到主类的所有动作都列在下面
SCRACT_0 |
0 |
处理按下按钮0 |
SCRACT_1 |
1 |
处理按下按钮1 |
SCRACT_2 |
2 |
处理按下按钮2 |
SCRACT_3 |
3 |
处理按下按钮3 |
SCRACT_4 |
4 |
处理按下按钮4 |
SCRACT_5 |
5 |
处理按下按钮5 |
SCRACT_6 |
6 |
处理按下按钮6 |
SCRACT_7 |
7 |
处理按下按钮7 |
SCRACT_8 |
8 |
处理按下按钮8 |
SCRACT_9 |
9 |
处理按下按钮9 |
SCRACT_OK |
10 |
处理按下确定按钮 |
SCRACT_CANCEL |
11 |
处理按下取消按钮 |
SCRACT_DIAL |
12 |
处理按下拨号按钮 |
SCRACT_HANG |
13 |
处理按下挂断按钮 |
SCRACT_OFF |
14 |
处理关闭手机 |
SCRACT_ON |
15 |
处理开启手机 |
SCRACT_NORMAL |
16 |
处理正常模式 |
SCRACT_STAR |
17 |
处理按下星号按钮 |
SCRACT_SQUAR |
18 |
处理按下井号按钮 |
SCRACT_BASEMENU |
19 |
处理显示基本菜单 |
SCRACT_SETTINGSMENU |
20 |
处理显示设置菜单 |
SCRACT_RINGSANDBEEPSMENU |
21 |
处理显示铃声和提示音菜单 |
SCRACT_MUTEMENU |
22 |
处理显示静音菜单 |
SCRACT_ORGANIZERMENU |
23 |
处理显示组织者菜单 |
SCRACT_MESSAGESMENU |
24 |
处理显示消息菜单 |
SCRACT_SENDMESSAGEMENU |
25 |
处理显示发送消息部分 |
SCRACT_CLEARMESSAGEMENU |
26 |
处理显示清除消息部分 |
SCRACT_READMESSAGEMENU |
27 |
处理显示阅读消息部分 |
SCRACT_ADDPHONEMENU |
28 |
处理显示添加电话菜单 |
SCRACT_READPHONEMENU |
29 |
处理显示阅读电话菜单 |
SCRACT_CLEARPHONEMENU |
30 |
处理显示清除电话菜单 |
SCRACT_PHONEBOOKMENU |
31 |
处理显示电话簿菜单 |
SCRACT_CALLRECORDSMENU |
32 |
处理显示通话记录菜单 |
SCRACT_RECEVINGMESSAGE |
33 |
处理消息刚刚收到时的动作。 |
SCRACT_RINGING |
34 |
处理振铃动作。 |
SCRACT_LOSTCON |
35 |
处理显示连接丢失。 |
SCRACT_ISOFF |
36 |
处理指定手机是否关机 |
SCRACT_BUSY |
37 |
处理指定手机是否忙碌 |
SCRACT_DIALACT |
38 |
处理拨打除拨号器以外的电话时的动作 |
SCRACT_VIBRATORMENU |
39 |
处理显示振动器菜单 |
SCRACT_SCREENCOLMENU |
40 |
处理显示屏幕颜色菜单 |
SCRACT_SCREENSELCOLMENU |
41 |
处理显示屏幕选中颜色菜单 |
SCRACT_SCREENMENU |
42 |
处理显示屏幕菜单 |
SCRACT_SCREENTXTMENU |
43 |
处理显示屏幕选中文本颜色菜单 |
SCRACT_LEFT |
44 |
处理按下左按钮 |
所有关键类的基础都以界面和类之间最大限度的独立性为宗旨。
这正是由于这些定义的动作使得“Scr”类非常独立,并使其能够在不同项目中用于不同情况。
为了更好地理解类之间的关系,您最好查看“MS.mdl”,它向您展示了所有关系,您需要安装“Rational Rose”程序才能打开.mdl文件。
在“Scr”中有一个名为“stat”的关键变量,其类型为CString,它包含设备的即时状态,并帮助我们了解我们现在所处的位置!
通过检查“stat”变量并在每次发生变化时更新它,我们可以轻松处理所有操作。
除了处理所有动作的主类外,为了使界面和代码生成达到最大程度的独立性,我为每个键盘按钮(如BtZero、BtOne等)创建了一个独立的类。
让我们看看这些独立类中有什么,例如BtOk类
#include "ShadeButtonST.H"
#include "scr.h"
class BtOk : public CShadeButtonST
{
public:
void OnPressBt(Scr *s)
{
s->PerformAct(SCRACT_OK);
}
void CancelSound()
{
SetSound(NULL,::GetModuleHandle(NULL), TRUE,FALSE);
}
};
如您所见,有两个方法,其中一个是“void OnPressBt (Scr *s){...}”,它在有人按下ok按钮时被调用,并要求Scr对象通过PerformAction方法执行SCRACT_OK动作。另一个方法用于取消一个按钮的声音属性。
在 Scr 类中,我们有一个重要的函数,它处理所有称为 PerformAction 的动作,每当我们想要执行一个动作时,我们都会使用这个方法。
如何使用?
有一个帮助文件,在运行MS时按F1即可查看。
您可以在那里看到其他内容,如果您仍有任何疑问,请给我发邮件,我很乐意;)。