实验 手册.docx_第1页
实验 手册.docx_第2页
实验 手册.docx_第3页
实验 手册.docx_第4页
实验 手册.docx_第5页
已阅读5页,还剩66页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验 4.1练习 1:在 Brew MP Simulator 6 中运行样例应用程序在 Brew MP Simulator 6 中运行样例程序应用程序: 1. 从“开始”菜单中,启动适用于 Qualcomm Brew MP SDK 的 Brew MP SDK Manager。 2. 在 SDK Manager 中,要显示制作工具和运行时工具,请单击“工具”选项卡。3. 启动 Target Manager。4. 单击“翻盖手机”设备配置文件,然后单击“创建目标”。 5. 当提示您输入“目标名称”时,保留默认名称,然后单击“继续”。6. 在“Simulator 目标”窗口中,双击“翻盖手机”。7. 在模拟设备上,启动 AppManager。8. 选择 C Localized App 应用程序。使用鼠标模拟设备上的按键功能。9. 要退出应用程序,请按“电源(结束)”。10. 在 AppManager 中,尝试其他应用程序。 11. 完成后,关闭 Simulator 和 Target Manager。练习 2:从 Visual Studio 安装样例源代码并运行 Simulator将样例应用程序源代码安装到便携式计算机上:1. 从“开始”菜单中,启动 Brew MP SDK Manager。2. 要显示工具组和平台,请单击“设置”。3. 在“工具组”“可选组件”中,单击“安装”安装样例程序。4. 按照向导窗口中的提示进行操作。请注意安装文件的位置。使用安装的源代码打开项目:1. 在 Visual Studio 中,单击“文件”“打开”“项目/解决方案”。2. 导航到已安装的源代码,选择 c_basicapp_VS.vcproj,然后单击“打开”。 3. 在 Visual Studio Solution Explorer 窗格中,导航到“源文件”目录,然后双击 c_basicapp.c 加载文件。4. 在 Visual Studio 中,使用 Brew MP 插件工具栏执行以下操作:A. 选择“模拟目标”作为目标类型B. 选择 Brew MP 目标C. 单击 “运行” Brew MP 将启动 Simulator 并运行应用程序。 如果已经打开 Simulator,它可能在另一个窗口后面运行。 完成本实验后,您将: 在 Target Manager 中创建了设备配置文件,其特定于所需的 Brew MP SDK 版本 根据新创建的 Brew MP 目标配置文件运行了样例应用程序 将源代码从样例应用程序安装到便携式计算机中 在 Visual Studio 中打开了一个源代码项目 从 Visual Studio 窗口在 Simulator 上生成并运行了应用程序实验 4.2练习 1运行 Brew MP 应用程序向导 生成 Brew MP 应用程序:1. 启动 Visual Studio 2. 选择“文件”“新建”“项目”。3. 在“项目类型”中,选择“Brew MP”。4. 在“Visual Studio 已安装的模板”下,选择“C 应用程序”。 5. 在“名称:”字段中,输入 “ myapp ” 。6. 单击“浏览”,导航至 C:Documents and SettingsMy DocumentsVisual Studio Projects。 7. 单击“确定”。 练习 2查看源文件 熟悉 Brew MP 应用程序编程基础知识:1. 在 Visual Studio 的 Solution Explorer 中,展开“头文件”文件夹。打开 myapp.bid 文件。此文件在 AEECLSID_MYAPP 常量中定义了应用程序的名称,并为其分配了十六进制值类 ID。 2. 打开 myapp_res.h 文件。此文件定义了 MYAPP_RES_.H 头文件常量、MYAPP_RES_FILE(作为 myapp.bar)、此应用程序使用的对应资源文件以及 IDS_STRING_1001(作为对 ID 值为 1001 的文件中字符串资源的引用)。3. 展开“资源文件”文件夹。打开 myapp.car 文件。此文件包含资源文件中所含资源的名称、ID、类型和数据。 4. 打开 myapp.cif。此文件标识各种重要模块资源,包括包含应用程序 AEECLSID 的 myapp.bid 文件。也可用它标识应用程序和应用程序使用的任何 MIME 类型处理程序所使用的应用程序扩展。 5. 打开 myapp_ico.png。此文件是为该应用程序创建的默认图标,将显示在 Simulator 和设备的 App Manager 中。 6. 展开“源文件”文件夹。请注意存在以下两个文件:AEEMODGEN包含模块接口定义AEEAPPGEN包含Applet接口定义这两个源文件提供了所有模块和Applet接口及类的定义,所有 MOD Applet项目必须具有这两个源文件。 7. 打开 myapp.c。 8. 找到“Include 和变量定义”部分。本部分包括各种类和接口的所有头文件。 9. 找到 myapp 结构。此数据结构是必需的,它定义了用于保存所有大型变量、全局变量和接口声明的数据结构。10. 找到 AEEClsCreateInstance() 函数。此函数可基于应用程序的 AEECLSID 创建应用程序。11. 找到 FreeAppData() 函数。此函数被用作析构函数,可在应用程序关闭时释放所创建的资源和接口。 12. 找到 myapp_HandleEvent() 函数。Brew MP 使用事件驱动型模型,此函数可提供与应用程序交互的主要方式。13. 找到 myapp_DrawScreen() 函数。此函数由 myapp_HandleEvent() 函数调用,用作 EVT_APP_START 事件的返回函数,它会调用 IDisplay 接口以绘制到屏幕。此函数也使用 ISHELL_LoadResString 从 myapp.bar 资源文件加载文本字符串。 注意:这些接口和函数将在下面几节讨论。有关详细信息,请参见 SDK Manager“资源”页面上的 API Reference(API 参考)。 练习 3使用资源文件 1. 在 Visual Studio 中,打开 myapp 项目(如果尚未打开)。2. 从 Brew MP 工具栏中,选择“启动 Brew MP 工具”,然后选择“Resource Manager”。3. 在 Resource Manager 中,选择“文件”“打开”,导航到练习 1 中创建的 myapp 项目文件夹。找到 myapp.car 文件,然后单击“打开”。4. 在“编辑数据”字段中,将“Hello World”更改为“Hello ”,其中“”是您的名字。 完成本实验后,您将: 使用应用程序向导创建新的 Brew MP MOD 应用程序 浏览新创建应用程序的源文件 使用 Resource Manager 编辑应用程序 CAR 文件 重新编译应用程序并在 Simulator 中运行以查看带有您名字的字符串 Hello实验 4.3练习 1向 myapp 应用程序添加 ISettings 接口此项目使用 ISettings 接口读取设备的语言设置并在 Simulator 的输出窗口中返回该设置。 1. 打开 SDK Manager。2. 使用 API Reference guide(API 参考指南)(可从 SDK manager 的“资源”选项卡中找到)查找要包括在项目中的头文件。 3. 启动 Visual Studio,然后打开 myapp 项目(如果尚未打开)。4. 导航至 myapp.c 的“Include 和变量定义”部分。5. 编写语句,以包括在步骤 2 中找到的 ISettings 头文件。6. 读取和更改设置时,ISettings 接口使用注册表对象提供通知。要确保提供此功能,请将以下语句添加到“Include 和变量定义”部分:#include AEESettingsReg.bid 7. 将 ISettings 对象的指针添加到Applet结构中的接口。使用 IDisplay 指针作为线索,以确保语法正确。 8. 导航到 FreeAppData 函数,添加所需代码以释放接口。9. 生成项目并检查错误。 注意:直到完成下一练习后,本实验中的代码更改才会显示在 Simulator 中。练习 2使用 ISettings 检索语言设置 1. 本练习使用 DBGPRINTF 助手函数和部分 AEEStdLib 库。请将头文件添加到 myapp.c 源文件的“Include 和变量声明”部分。 2. 在 myapp.c 源文件中,导航到 myapp_HandleEvent 函数。此项目使用 EVT_KEY switch 来响应在设备上按下“选择”键的操作。此键的 wParam 是 AVK_SELECT。有关事件处理的更多信息,请参见API 参考指南。有关事件代码的完整列表,请参见 AEEVCodes.h 头文件。 3. 添加代码以在 InitAppData 中创建 ISettings 接口的实例。确保实例已创建。 if (AEE_SUCCESS != ISHELL_CreateInstance(pMe-piShell, AEECLSID_SettingsReg, (void *)&pMe-piSettings) DBGPRINTF(Failed to create ISettings object); pMe-piSettings = NULL; return FALSE; / Failure occurred 4. 在 EVT_KEY 下输入一个 switch 以将 AVK_SELECT 作为 wParam 进行处理。 switch(wParam) case AVK_SELECT: / Add code here. return TRUE; default: return FALSE; 5. 在大括号之间,添加一个 int 变量来保存接口创建结果。 int nRes;6. 创建一个缓冲区来保存 ISettings 查询结果。如果函数失败,缓冲区将保存错误消息。char szCurrCode20; 7. 将活动设备的语言设置加载到缓冲区。验证是否已检索到语言。如果未检索到语言,则在 nRes 变量中提供反馈。 nRes = ISettings_Get(pMe-piSettings, /BREW/UI/Language, / Key to get setting-value (char*)&szCurrCode, sizeof(szCurrCode), / Buffer size for setting value NULL); if (AEE_SUCCESS != nRes) return TRUE; / Event handled regardless of error DBGPRINTF(Current language is:%s, szCurrCode); 8. 要生成应用程序并在 Simulator 中运行,请单击“运行”。 9. 在 Simulator 中,选择“查看”“日志”。此时将显示输出窗口。10. 在 Simulator 设备上,单击“选择”。 11. 导航到输出窗口。应显示以下文本:实验 5练习 1:研究和运行包含 Brew MP UI Widgets 的应用程序说明本实验的目的是使用实现了多个widgets的基本 Brew MP 应用程序。您将研究 widgets 项目中的组件。 您将执行的操作 将“widgets”项目复制到您的计算机 研究应用程序代码的各个元素在本实验中,您将研究和运行现有代码。执行时,代码将创建多个widgets,并允许用户与其中两个widgets进行交互。1. 从提供的配套软件中打开本练习中使用的 widgets 项目。在 Visual Studio 中,单击“文件”“打开”“项目/解决方案”。2. 在 Visual Studio 中,使用 Brew MP 插件工具栏执行以下操作:A. 选择“模拟目标”作为目标类型B. 选择 Brew MP 目标C. 单击 “运行”Brew MP 将启动 Simulator 并运行应用程序。如果已经打开 Simulator,它可能在另一个窗口后面运行。3. 使用“向上”和“向下”导航键以及“选择”键与应用程序进行交互。现在,让我们返回源代码文件 widget.c 并检查代码。4. 在 widget.c 代码中找到以下注释行 /DISCUSS P1_1。如果您查看此部分,您会发现其中包含该练习所需的widgets的头文件和类 BID 文件。另外还有新宏 RELEASEIF() 的定义,该宏用于安全释放已经创建的任何类。请注意,这不同于 FREEIF() 助手函数(在 AEEStdLib.h 中提供),后者用于释放内存指针。5. 在 widget.c 代码中找到以下注释行 /DISCUSS P1_2。此时您看到的是 InitAppData() 过程,这通常是创建和初始化Applet结构数据的位置。 要初始化widgets环境,必须从根容器入手。创建widgets后,应查看设备位图并使用其维度来设置容器约束。然后,将widgets逐个添加到根容器中。在此程序中,您将使用约束widgets,并通过设置每个widgets的约束来管理自己的widgets位置。对于每个widgets(附示例),首先需要创建该widgets的实例:nErr = ISHELL_CreateInstance(pMe-piShell, AEECLSID_STATICWIDGET, (void *)&(pMe-piwTitle); 然后,根据需要对widgets加以修饰:(void)IWIDGET_SetText(pMe-piwTitle, awchTitle, TRUE); 接下来,计算widgets的范围(大小)并在widgets中对其进行设置。 / Set extent:IWIDGET_GetPreferredExtent(pMe-piwTitle, &we); if(we.width deviceInfo).cxScreen) we.width = (pMe-deviceInfo).cxScreen; IWIDGET_SetExtent(pMe-piwTitle, &we); 最后,将widgets添加到根容器中。(void)IROOTCONTAINER_Insert(pMe-picRoot, pMe-piwTitle, WIDGET_ZNORMAL,&dwpos); 6. 在 widget.c 代码中找到以下注释行 /DISCUSS P1_3。切记,当调用 FreeAppData() 时,您将负责删除创建的所有类(例如调用 CreateInstance() 时)。7. 在 widget.c 代码中找到以下注释行 /DISCUSS P1_4。此处是响应向上和向下箭头以及更改根容器焦点的调用。完成后,您可以返回 TRUE 以表示您已经处理该事件。8. 在 widget.c 代码中找到以下注释行 /DISCUSS P1_5。使用widgets时,您需要允许widgets基础结构来处理您未处理的事件。 练习 2:将静态文本widgets和文本widgets添加到应用程序说明本实验的目的是将两个新widgets添加到应用程序并添加一些代码,以便在按下“选择”键时将文本从现有文本widgets复制到新的静态文本widgets。您将执行的操作 修改现有应用程序以支持静态文本widgets和文本widgets 测试修改后的应用程序在本实验中,您将使用练习 1 中的应用程序并修改代码。 1. 从提供的配套软件中打开本练习中使用的 widgets 项目。 2. 从提供的配套软件中打开本练习中使用的 AddedCode.c 文件。对于 widgets 项目中的每个 /INSERT 注释: 阅读说明 从 AddedCode.c 文件中复制/粘贴该代码 在每次修改后保存更改3. 在 widget.c 代码中找到以下注释行 /INSERT P2_1 HERE。要访问文本widgets的内容,您需要添加头文件 AEETextWidget.h /Start P2_1 #include AEETextWidget.h /End P2_1 4. 在 widget.c 代码中找到以下注释行 /INSERT P2_2 HERE。您需要在Applet结构中定义两个新的widgets指针。第一个widgets将保存并显示复制的文本。第二个widgets保存标题。/Start P2_2 IWidget * piwCopy; / Text Ctl static text widget. IWidget * piwCpyTitle; / Text Ctl static text widget. /End P2_2 5. 在 widget.c 代码中找到以下注释行 /INSERT P2_3 HERE。以下是标题的文本。/Start P2_3 static const AECHAR * awchCopyTitle = (AECHAR*)LThis is the output; /End P2_3 6. 在 widget.c 代码中找到以下注释行 /INSERT P2_4 HERE。这是将执行复制操作的过程的正向定义(代码位于 INSERT P2_8 步骤中)。/Start P2_4 static void widgets_HandleCopy(widgets * pMe); /End P2_4 7. 在 widget.c 代码中找到以下注释行 /INSERT P2_5 HERE。您应在此处将widgets添加到根容器。这与您之前对任何文本widgets所执行的操作相同。请注意,静态文本widgets没有边框,而文本widgets有。/Start P2_5 / Title widget for text output nErr = ISHELL_CreateInstance(pMe-piShell, AEECLSID_STATICWIDGET, (void *)&(pMe-piwCpyTitle); if (AEE_SUCCESS != nErr) return (nErr); (void)IWIDGET_SetFlags(pMe-piwCpyTitle, IDF_ALIGN_LEFT|IDF_ALIGN_TOP); (void)IWIDGET_SetText(pMe-piwCpyTitle, awchCopyTitle, TRUE); / Set extent: IWIDGET_GetPreferredExtent(pMe-piwCpyTitle, &we); we.width = (pMe-deviceInfo).cxScreen - we.width - 2; IWIDGET_SetExtent(pMe-piwCpyTitle, &we); / Set location: dwpos.x = 0; dwpos.y += oldwe.height + 7; dwpos.bVisible = TRUE; / Save the extent: oldwe = we; / Insert widget into root container: (void)IROOTCONTAINER_Insert(pMe-picRoot, pMe-piwCpyTitle, WIDGET_ZNORMAL,&dwpos); RELEASEIF(pMe-piwCpyTitle); / Copy widget nErr = ISHELL_CreateInstance(pMe-piShell, AEECLSID_STATICWIDGET, (void *)&(pMe-piwCopy); if (AEE_SUCCESS != nErr) return (nErr); / Set extent: IWIDGET_GetPreferredExtent(pMe-piwCopy, &we); we.width = (pMe-deviceInfo).cxScreen - 2; IWIDGET_SetExtent(pMe-piwCopy, &we); / Set location: dwpos.x = 0; dwpos.y += oldwe.height + 7; dwpos.bVisible = TRUE; / Save the extent: oldwe = we; / Insert widget into root container: (void)IROOTCONTAINER_Insert(pMe-picRoot, pMe-piwCopy, WIDGET_ZNORMAL, &dwpos); /End P2_58. 在 widget.c 代码中找到以下注释行 /INSERT P2_6 HERE。调用 FreeAppData() 时,此代码将删除这两个新widgets。/Start P2_6 RELEASEIF(pMe-piwCopy); RELEASEIF(pMe-piwCpyTitle);/End P2_69. 在 widget.c 代码中找到以下注释行 /INSERT P2_7 HERE。应在此处添加代码,以处理按下“选择”键时会发生的情况。这将调用 INSERT P2_8 中的一个函数来处理事件。/Start P2_7 case AVK_SELECT: widgets_HandleCopy(pMe); break;/End P2_710. 在 widget.c 代码中找到以下注释行 /INSERT P2_8 HERE。这是实际执行复制操作的代码。它将调用 IWidget_HasFocus(),以确保仅当在正确的widgets中按下“选择”键时做出响应。/Start P2_8static void widgets_HandleCopy(widgets * pMe) boolean bFocus; AECHAR *pText; / Only copy the data if SELECT is pressed while the / text widget is active IWidget_HasFocus(pMe-piwText, &bFocus); if (bFocus) / Copy the input to the output IWidget_GetTextWidgetText(pMe-piwText, &pText); IWIDGET_SetText(pMe-piwCopy, pText, TRUE); /End P2_811. 生成并运行应用程序。不应存在编译错误。Simulator 中的初始屏幕应如下所示:12. 更改文本widgets的焦点,并输入文本“hello”,然后按“选择”键。练习 3:调试widgets 说明本实验的目的是测试调试widgets代码的能力。您将执行的操作 设置调试断点 使用调试菜单和工具栏控制调试 在本实验中,您将使用练习 2 中的应用程序并使用调试方法。1. 退出 Simulator(如果正在运行)。2. 在上一练习的步骤 P2_8 中的 if (bFocus) 行添加的代码中放置一个断点。3. 按下 Brew MP 工具栏上的 “调试”按钮。Simulator 将启动,并运行该应用程序。4. 按下“选择”键,而不使用“向上”或“向下”键。代码将中断,您会看到 bFocus 的值为 0x00 或 FALSE。已按下“选择”键,但是焦点不在文本widgets中。5. 按 F5 键,或者按调试工具栏中的绿色 向右键,或者从调试菜单中选择“继续”。该应用程序将再次运行。6. 按“向下”键将在文本widgets中显示焦点。输入一些文本。7. 按下“选择”键。代码将中断,您会看到 bFocus 的值现在为 0x01 或 TRUE。 8. 按 F11 键单步执行代码。请注意,将从文本widgets复制文本,然后将其粘贴到静态文本widgets。练习 4:向应用程序添加带有修饰器和侦听程序的按钮widgets 说明本实验的目的是添加修饰有文本且具有用于处理事件更改的侦听程序的按钮widgets。您将执行的操作 修改现有应用程序以支持按钮widgets 添加文本修饰器 添加模型侦听程序在本实验中,您将使用练习 2 中的应用程序并使用调试方法。1. 退出 Simulator(如果正在运行)。2. 要停止调试,可按 Shift+F5 组合键,或者按调试工具栏上的 “停止调试”按钮,或者从调试菜单中选择“停止调试”。3. 从提供的辅助软件中为本练习打开“widgets”项目(如果尚未打开)。 4. 从提供的辅助软件中为本练习打开 AddedCode.c 文件(如果尚未打开)。对于 widgets 项目中的每个 /INSERT 注释: 阅读说明 从 AddedCode.c 文件中复制/粘贴该代码 在每次修改后保存更改5. 在 widget.c 代码中找到以下注释行 /INSERT P3_1 HERE。添加修饰器的头文件和按钮widgets的 Brew MP Class ID(BID)文件。/Start P3_1 #include AEEIDecorator.h #include AEEButtonWidget.bid /End P3_1 6. 在 widget.c 代码中找到以下注释行 /INSERT P3_2 HERE。Applet结构必须具有由修饰按钮widgets使用的指向修饰器和文本widgets的指针。还需要用作切换开关的 Boolean 值,以确定要和按钮一起使用的文本。将 ModelListener 放置在此处的原因是它必须是静态的,并且可用。它与可能由widgets使用的其他侦听程序链接。请注意,ModelListener 是完全结构,而不是指向结构的指针。/Start P3_2 IDecorator * pidButton; / Button Widget IWidget * piwBPrompt; / Button Ctl static text ModelListener ButtonListener; / The ButtonListener boolean bButtonChanged; /End P3_2 7. 在 widget.c 代码中找到以下注释行 /INSERT P3_3 HERE。添加在每次按下按钮时将使用的交互文本字符串。/Start P3_3 static const AECHAR * awchBtnOff = (AECHAR*)L Please press Button; static const AECHAR * awchBtnOn = (AECHAR*)L Button Pressed; /End P3_3 8. 在 widget.c 代码中找到以下注释行 /INSERT P3_4 HERE。这是将执行复制操作的过程的正向定义(代码位于 INSERT P3_8 步骤中)。/Start P3_4 static void widgets_BtnListener(void *pUserData, ModelEvent *pEvent); /End P3_4 9. 在 widget.c 代码中找到以下注释行 /INSERT P3_5 HERE。要设置模型侦听程序,首先,您需要找到此widgets模型的地址。此变量将包含指向该模型的指针。/Start P3_5 IModel *pModel; /End P3_5 10. 在 widget.c 代码中找到以下注释行 /INSERT P3_6 HERE。通过创建具有该widgets类型的修饰widgets实例,可创建修饰widgets。请注意,您已创建 pidButton 作为指向Applet结构中的 IDecorator 的类型指针。 可通过调用 LISTENER_Init() 初始化Applet结构中的侦听程序结构。MyApp_BtnListener() 函数的地址和指向Applet结构的指针在 ModelListener 结构中设置。以下代码行从修饰器widgets获取视图模型,然后将侦听程序添加到其中。此代码的其他部分将创建文本widgets并将其添加到修饰器对象。新的widgets最终将添加至根容器。/Start P3_6 / Add the button Widget nErr = ISHELL_CreateInstance(pMe-piShell, AEECLSID_ButtonWidget,(void *)&(pMe-pidButton); if (AEE_SUCCESS != nErr) return (nErr); /Start P3_6 / Add the button Widget nErr = ISHELL_CreateInstance(pMe-piShell, AEECLSID_ButtonWidget,(void *)&(pMe-pidButton); if (AEE_SUCCESS != nErr) return (nErr); / Add a Listener LISTENER_Init(ModelListener *)&(pMe-ButtonListener), widgets_BtnListener, (void *)pMe); IWidget_GetViewModel(IDecorator_to_IWidget(pMe- pidButton),&pModel); nErr = IMODEL_AddListener(pModel, (ModelListener *)&(pMe-ButtonListener); IMODEL_Release(pModel); / Prompt widget for Button input nErr = ISHELL_CreateInstance(pMe-piShell, AEECLSID_STATICWIDGET,(void *)&(pMe-piwBPrompt); if (AEE_SUCCESS != nErr) return (nErr); (void)IWIDGET_SetFlags(pMe-piwBPrompt, IDF_ALIGN_LEFT|IDF_ALIGN_TOP); (void)IWIDGET_SetText(pMe-piwBPrompt, awchBtnOff, TRUE); / Set extent: IWIDGET_GetPreferredExtent(pMe-piwBPrompt, &we); IWIDGET_SetExtent(pMe-piwBPrompt, &we); IWIDGET_SetExtent(IDecorator_to_IWidget(pMe- pidButton), &we); IDecorator_SetWidget(pMe-pidButton, pMe-piwBPrompt); / Set location: dwpos.x = 0; dwpos.y += oldwe.height + 7; dwpos.bVisible = TRUE; / Save the extent: oldwe = we; / Insert widget into root container: (void)IROOTCONTAINER_Insert(pMe-picRoot, IDecorator_to_IWidget(pMe-pidButton), WIDGET_ZNORMAL,&dwpos); / Set the boolean switch to FALSE pMe-bButtonChanged = FALSE; /End P3_6 11. 在 widget.c 代码中找到以下注释行 /INSERT P3_7 HERE。调用 FreeAppData() 时,此代码将删除这两个新widgets。/Start P3_7 RELEASEIF(pMe-pidButton); RELEASEIF(pMe-piwBPrompt); /End_P3_7 12. 在 widget.c 代码中找到以下注释行 /INSERT P3_8 HERE。这是按钮侦听程序的核心代码。按照定义,侦听程序将收到来自视图模型的所有事件。但是在本练习中,您只对状态更改感兴趣。对其他事件(如焦点)不感兴趣。 请注意,侦听程序函数有两个参数。第一个参数是您用于设置指针的指向Applet结构的指针,第二个参数是事件。拥有感兴趣的事件后,您可以检查元素状态。如果状态已更改,请使用切换 Boolean 值确定要复制到widgets的文本。/Start P3_8 static void widgets_BtnListener(void *pUserData, ModelEvent *pEvent) uint32 Evnt; widgets *pMe = (widgets *)pUserData; Evnt = pEvent-evCode; if (Evnt = EVT_MDL_WIDGETELEM_STATE) WidgetElemStateEvent *wese = (WidgetElemStateEvent *)pEvent; if (wese-nElemState = WIDGETELEM_STATE_SACTIVE) / Everytime the button is pressed / swap the text if (!pMe-bButtonChanged) (void)IWIDGET_SetText(pMe-piwBPrompt, awchBtnOn, TRUE); pMe-bButtonChanged = TRUE; else (void)IWIDGET_SetText(pMe-piwBPrompt, awchBtnOff, TRUE); pMe-bButtonChanged = FALSE; /End P3_8 13. 在 Brew MP 工具栏上按下 “运行”按钮。Visual Studio 将生成应用程序,运行该应用程序时,Simulator 将启动。Simulator 屏幕应如下所示: 14. 在 Simulator 上按下标有“Please press Button”的按钮。Simulator 中的按钮文本应为“Button Pressed”。15. 与 Simulator 中的其他widgets交互,以确保它们继续正常运行。如有必要,请调试应用程序。完成后完成本实验后,您将: 修改基本的 Brew MP 应用程序以支持widgets 将静态文本widgets和文本widgets添加至根容器 创建带有修饰器文本的按钮widgets 使用侦听程序确定widgets是否有焦点 设置widgets和按钮的范围属性 调试应用程序的widgets代码 编译、运行和操作应用程序实验 6练习 1:将 Brew 应用程序导入 Brew MP说明本实验的目的是使用 Brew MP 移植向导将现有的 Brew 3.1 应用程序移植到 Brew MP。开始之前 您应满足前面所有的软件要求并完成前面的实验 您应具有此课程的配套软件,其中包含要移植的应用程序您将执行的操作 使用移植向导将 Brew 应用程序导入 Brew MP 在新移植的项目中更新源代码文件

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论