65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.23/5 (21投票s)

2003 年 7 月 29 日

6分钟阅读

viewsIcon

62598

downloadIcon

719

这个应用程序只是一个简单的模拟器,但它的能力是你可以轻松地为你的手机添加更多属性,并且界面和源代码是分开的,所以你可以以很低的成本改变界面!!!

第一个对话框截图

    Sample screenshot

    手机主人截图

    Sample screenshot

    拨号器截图

    Sample screenshot

    引言

    大多数人可能会觉得模拟器毫无价值,纯粹是浪费时间。但对于这些人,我应该说模拟器实际上并不是一项简单的工作,它需要大量的经验和能力,这在不同的项目中会有所不同。这个程序只是一个项目,其目的是展示作者在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即可查看。

    您可以在那里看到其他内容,如果您仍有任何疑问,请给我发邮件,我很乐意;)。

    © . All rights reserved.