科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件学习使用Microsoft eMbedded Visual C (3)

学习使用Microsoft eMbedded Visual C (3)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文为您讲解手持设备的编程技巧,具体内容包括:准备学习eVC、我的第一个项目、仅仅通过另一个简单的步骤创建项目、同中有异、制作一个声音。

作者:John Kennedy 来源:51CTO.com 2007年9月1日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

同中有异

如果您浏览一下新项目的源代码,同时您知道想要找什么,那么您就会看到所有相似的代码片段,它们组成了所有的 Windows 程序。这有什么大惊小怪的呢?Pocket PC 只是一种通过 Shrink-o-Matic 光线传递信号的普通 PC 吗?不,这是不同的。或许最根本的不同在于没有硬盘,因此没有长时间的启动过程。当您按下 Pocket PC 上的“On”按钮时,它将在一秒内启动,因此它会在您需要它的任何时间出现。

当您按下“Off”按钮时,设备将进入特殊的低能状态。屏幕关闭,CPU 休眠,只使用微量的电池电流来保持内存和一些内部时钟运转。

如果您按下重启按钮,那么设备将清除它的程序内存,停止所有正在运行的程序并重新启动。如果您移走电源(或者触发了一个与设备特定键组合的完全重启键),那么设备就会执行完全重启并恢复到它的出厂设置。如果它会删除您安装的应用程序(而不是 ROM 中内置的应用程序,例如 Pocket Word)和您的数据,那么无论如何您将不希望这些事情经常发生。

那么,我为什么要告诉您所有这些事情呢?“您喝醉了吗?”我的经理常常问我。不 — 这是一种状况:Pocket PC 与“真正”的 PC 不同之处在哪里,我们什么时候可以利用这种不同。可以这样处理 — 我们将开发一个应用程序,当您打开 Pocket PC 时,它会发出美妙的声音。我的设计允许您增加优美的声音效果 — 例如 Hitchhiker's Guide to the Galaxy 这本书所制作的声音(在 Douglas Adams 内存中) — 当您打开您的 iPAQ、Jornada 或 Cassiopeia 时。

现在如果您已经用过 Pocket PC,那么您可能发现 Windows 下有个名为 Startup 的目录。您可能已经假定,当设备启动后您希望建立它时,这就是您放置应用程序的地方。好的,这是陷阱 — 它不是这样运行的。只有在重启之后,Startup 目录中的所有程序才能执行,这意味着我们无法只通过将声音效果程序放入 Startup 来播放我们的声音效果。或许我们可以,但是只有在每次执行重启时它才播放,这相当蹩脚。

下面是一种巧妙的方法。我们将使用 Windows CE 特定的函数,它可以在启动时创建一个程序。我们创建的程序将是一个可以播放声音效果的程序。上面我说的都明白了吗?好,现在我们开始。

制作一个声音

首先,我们会编写一个可以播放声音示例的程序。Pocket PC 可以使用名为 sndPlaySound() 的简单的 API 函数重新播放标准 WAV 文件。保持我们一贯的懒惰风格,我们将使用向导创建一个空项目,然后简单地调用 API。让我们开始。

创建您的 PlaySound 程序

1.关闭 embedded Visual Tools 中任何现有项目。 

2.从 File 菜单中选择 New。 

3.选择 WCE Pocket PC Application。 

4.输入程序名称,例如 PlaySound。 

5.选择 OK。 

6.选择 A simple Windows CE application 作为项目类型。 

7.选择 OK,创建您的项目。



使用 File View 浏览构成项目的源文件并选择 PlaySound.cpp。这是程序的核心,我们将在此处添加触发声音效果的代码。向导也添加注释“Place code here”,以免有什么疑问。

因此,用下面这行代码替换那一行:

sndPlaySound(L"Asterisk",SND_ASYNC);

sndPlaySound 函数带有两个参数 — 第一个参数是播放的文件名称,第二个参数是一个标志,告诉系统如何播放声音。您可以从联机帮助中获得关于该函数的更多信息。我们可以依赖于此处存在的示例 Asterisk,它作为默认声音构建到每个设备中。实际上我们可以不写文件名的“.wav”部分,假定它存在。还要检查字母“L” — 它不是印刷错误,编译器需要将它后面的文本看作 Unicode,我们将在更新版本中介绍 Unicode。

如果您有一个真正的 Pocket PC,那么现在正好可以连接上并运行 ActiveSync。如果您没有,您也可以一直使用模拟器,但是说实话,您现在真的想买一个,对吗?继续,当您访问本地计算机存储器时,我们会一直等待您。

好的,然后呢?非常好。打开您的 Pocket PC 并将它连接上。现在您需要确定设备使用的处理器,因此您可以挑选正确的活动配置。您的设备会告诉您是否选择 Start/Settings/System/About,但是对于大多数普通的设备,下面的表格将十分方便:

设备                           处理器

HP Jornada                 SH3

Compaq iPAQ            ARM

Casio Cassiopeia         MIPS

使用这些信息来选择正确的配置。此时不用担心选择 Debug 还是 Release — 两者都可以。

构建程序,它将自动复制到您的设备中。当您运行它时,您应该听到该示例。如果没有听到,那么请检查您是否开启了您设备上的音量控制,您是否正确拼写了“Asterisk”。(不要笑 — 我的老板常常指责我的拼写,作为一个技术作者,这可能会伤害我的自信心。还用怀疑吗,我已经情感崩溃了,对吗?)

现在我将编写一个程序,它在启动时执行该 PlaySound 程序。请关闭 PlaySound 项目,然后创建另一个新的 "A simple Windows CE application" 类型的项目。调用这个“PlayOn”,此次将下列代码行添加到 PlayOn.cpp 文件中:

CeRunAppAtEvent(L"Playsound",NOTIFICATION_EVENT_WAKEUP);

该函数是 Windows CE 特定的函数(名称开头的 Ce 应该告诉您),当它收到一个特定的通知消息时,实际上它只是运行指定的应用程序。相关的消息是 NOTIFICATION_EVENT_WAKEUP,当设备开启时发出此消息。

当您运行该程序时,您只需运行一次,系统会一直准备着 — 关闭,然后开启,然后呢?然后呢?您将看到一个错误信息。Playsound.exe 应用程序必须在 Windows/ 目录中,而不是在 Windows/Start Menu 目录中,这是默认放置该应用程序的地方。从 Pocket PC 的文件资源管理器 (File Explorer) 中找到 Playsound.exe,然后将它剪切并粘贴到主 Windows 目录中。现在关闭,然后重启,瞧! — 触发了声音示例。

现在可能出现了两个问题。首先,您如何能够使用自己的示例呢,其次您如何能够阻止它们在您每次开启设备时发生呢。

使用您自己的示例比较容易。随便找一个 WAV 文件,然后将它复制到 Pocket PC 中。不要试图使用任何一种非常古怪的采样速率,然后更改 Playsound.exe 程序以反映新文件名。

每次都阻止系统运行 PlaySound.exe 应用程序,这有点棘手。通知系统将幸免于热重启,因此您需要编写另一个应用程序。创建该程序并调用 PlayOff,然后添加下面一行代码:

CeRunAppAtEvent(L"Playsound",NOTIFICATION_EVENT_NONE);

这一行抵消了现有的通知。运行一次,自动启动功能会禁用。

暂时先到这里

我希望 eMbedded Visual C++ 的这个介绍对您恰好合适。通常,在无足轻重与纷繁芜杂之间找到平衡是非常困难的。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章