实验 手册范本.docx
《实验 手册范本.docx》由会员分享,可在线阅读,更多相关《实验 手册范本.docx(25页珍藏版)》请在冰豆网上搜索。
实验手册范本
实验4.1
练习1:
在BrewMPSimulator6中运行样例应用程序
在BrewMPSimulator6中运行样例程序应用程序:
1.从“开始”菜单中,启动适用于QualcommBrewMPSDK的BrewMPSDKManager。
2.在SDKManager中,要显示制作工具和运行时工具,请单击“工具”选项卡。
3.启动TargetManager。
4.单击“翻盖手机”设备配置文件,然后单击“创建目标”。
5.当提示您输入“目标名称”时,保留默认名称,然后单击“继续”。
6.在“Simulator目标”窗口中,双击“翻盖手机”。
7.在模拟设备上,启动AppManager。
8.选择CLocalizedApp应用程序。
使用鼠标模拟设备上的按键功能。
9.要退出应用程序,请按“电源(结束)”。
10.在AppManager中,尝试其他应用程序。
11.完成后,关闭Simulator和TargetManager。
练习2:
从VisualStudio安装样例源代码并运行Simulator
将样例应用程序源代码安装到便携式计算机上:
1.从“开始”菜单中,启动BrewMPSDKManager。
2.要显示工具组和平台,请单击“设置”。
3.在“工具组”“可选组件”中,单击“安装”安装样例程序。
4.按照向导窗口中的提示进行操作。
请注意安装文件的位置。
使用安装的源代码打开项目:
1.在VisualStudio中,单击“文件”“打开”“项目/解决方案”。
2.导航到已安装的源代码,选择c_basicapp_VS.vcproj,然后单击
“打开”。
3.在VisualStudioSolutionExplorer窗格中,导航到“源文件”目录,然后双击c_basicapp.c加载文件。
4.在VisualStudio中,使用BrewMP插件工具栏执行以下操作:
A.选择“模拟目标”作为目标类型
B.选择BrewMP目标
C.单击“运行”
→BrewMP将启动Simulator并运行应用程序。
→如果已经打开Simulator,它可能在另一个窗口后面运行。
完成本实验后,您将:
▪在TargetManager中创建了设备配置文件,其特定于所需的BrewMPSDK版本
▪根据新创建的BrewMP目标配置文件运行了样例应用程序
▪将源代码从样例应用程序安装到便携式计算机中
▪在VisualStudio中打开了一个源代码项目
▪从VisualStudio窗口在Simulator上生成并运行了应用程序
实验4.2
练习1-运行BrewMP应用程序向导
生成BrewMP应用程序:
1.启动VisualStudio
2.选择“文件”“新建”“项目”。
3.在“项目类型”中,选择“BrewMP”。
4.在“VisualStudio已安装的模板”下,选择“C应用程序”。
5.在“名称:
”字段中,输入“myapp”。
6.单击“浏览”,导航至
C:
\DocumentsandSettings\\MyDocuments\VisualStudio\Projects。
7.单击“确定”。
练习2-查看源文件
熟悉BrewMP应用程序编程基础知识:
1.在VisualStudio的SolutionExplorer中,展开“头文件”文件夹。
打开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和设备的AppManager中。
6.展开“源文件”文件夹。
请注意存在以下两个文件:
AEEMODGEN-包含模块接口定义
AEEAPPGEN-包含Applet接口定义
这两个源文件提供了所有模块和Applet接口及类的定义,所有MODApplet项目必须具有这两个源文件。
7.打开myapp.c。
8.找到“Include和变量定义”部分。
本部分包括各种类和接口的所有头文件。
9.找到myapp结构。
此数据结构是必需的,它定义了用于保存所有大型变量、全局变量和接口声明的数据结构。
10.找到AEEClsCreateInstance()函数。
此函数可基于应用程序的AEECLSID创建应用程序。
11.找到FreeAppData()函数。
此函数被用作析构函数,可在应用程序关闭时释放所创建的资源和接口。
12.找到myapp_HandleEvent()函数。
BrewMP使用事件驱动型模型,此函数可提供与应用程序交互的主要方式。
13.找到myapp_DrawScreen()函数。
此函数由myapp_HandleEvent()函数调用,用作EVT_APP_START事件的返回函数,它会调用IDisplay接口以绘制到屏幕。
此函数也使用ISHELL_LoadResString从myapp.bar资源文件加载文本字符串。
注意:
这些接口和函数将在下面几节讨论。
有关详细信息,请参见SDKManager“资源”页面上的APIReference(《API参考》)。
练习3-使用资源文件
1.在VisualStudio中,打开myapp项目(如果尚未打开)。
2.从BrewMP工具栏中,选择“启动BrewMP工具”,然后选择“ResourceManager”。
3.在ResourceManager中,选择“文件”“打开”,导航到练习1中创建的myapp项目文件夹。
找到myapp.car文件,然后单击“打开”。
4.在“编辑数据”字段中,将“HelloWorld”更改为“Hello”,其中“”是您的名字。
完成本实验后,您将:
▪使用应用程序向导创建新的BrewMPMOD应用程序
▪浏览新创建应用程序的源文件
▪使用ResourceManager编辑应用程序CAR文件
▪重新编译应用程序并在Simulator中运行以查看带有您名字的字符串Hello
实验4.3
练习1-向myapp应用程序添加ISettings接口
此项目使用ISettings接口读取设备的语言设置并在Simulator的输出窗口中返回该设置。
1.打开SDKManager。
2.使用APIReferenceguide(《API参考指南》)(可从SDKmanager的“资源”选项卡中找到)查找要包括在项目中的头文件。
3.启动VisualStudio,然后打开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_KEYswitch来响应在设备上按下“选择”键的操作。
此键的wParam是AVK_SELECT。
有关事件处理的更多信息,请参见《API参考指南》。
有关事件代码的完整列表,请参见AEEVCodes.h头文件。
3.添加代码以在InitAppData中创建ISettings接口的实例。
确保实例已创建。
if(AEE_SUCCESS!
=ISHELL_CreateInstance(pMe->piShell,
AEECLSID_SettingsReg,
(void**)&pMe->piSettings)){
DBGPRINTF("FailedtocreateISettingsobject");
pMe->piSettings=NULL;
returnFALSE;//Failureoccurred
}
4.在EVT_KEY下输入一个switch以将AVK_SELECT作为wParam进行处理。
switch(wParam){
caseAVK_SELECT:
{
//Addcodehere...
}
→returnTRUE;
default:
returnFALSE;
}
5.在大括号之间,添加一个int变量来保存接口创建结果。
intnRes;
6.创建一个缓冲区来保存ISettings查询结果。
如果函数失败,缓冲区将保存错误消息。
charszCurrCode[20];
7.将活动设备的语言设置加载到缓冲区。
验证是否已检索到语言。
如果未检索到语言,则在nRes变量中提供反馈。
nRes=ISettings_Get(pMe->piSettings,
"/BREW/UI/Language",//Keytogetsetting-value
(char*)&szCurrCode,
sizeof(szCurrCode),//Buffersizeforsettingvalue
NULL);
if(AEE_SUCCESS!
=nRes){
returnTRUE;//Eventhandledregardlessoferror
}
DBGPRINTF("Currentlanguageis:
%s",szCurrCode);
8.要生成应用程序并在Simulator中运行,请单击“运行”。
9.在Simulator中,选择“查看”“日志”。
此时将显示输出窗口。
10.在Simulator设备上,单击“选择”。
11.导航到输出窗口。
应显示以下文本:
实验5
练习1:
研究和运行包含BrewMPUIWidgets的应用程序
说明
本实验的目的是使用实现了多个widgets的基本BrewMP应用程序。
您将研究widgets项目中的组件。
您将执行的操作
▪将“widgets”项目复制到您的计算机
▪研究应用程序代码的各个元素
在本实验中,您将研究和运行现有代码。
执行时,代码将创建多个widgets,并允许用户与其中两个widgets进行交互。
1.从提供的配套软件中打开本练习中使用的widgets项目。
在VisualStudio中,单击“文件”“打开”“项目/解决方案”。
2.在VisualStudio中,使用BrewMP插件工具栏执行以下操作:
A.选择“模拟目标”作为目标类型
B.选择BrewMP目标
C.单击“运行”
BrewMP将启动Simulator并运行应用程序。
如果已经打开Simulator,它可能在另一个窗口后面运行。
3.使用“向上”和“向下”导航键以及“选择”键与应用程序进行交互。
现在,让我们返回源代码文件widget.c并检查代码。
4.在widget.c代码中找到以下注释行//DISCUSSP1_1。
如果您查看此部分,您会发现其中包含该练习所需的widgets的头文件和类BID文件。
另外还有新宏RELEASEIF()的定义,该宏用于安全释放已经创建的任何类。
请注意,这不同于FREEIF()助手函数(在AEEStdLib.h中提供),后者用于释放存指针。
5.在widget.c代码中找到以下注释行//DISCUSSP1_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中对其进行设置。
//Setextent:
IWIDGET_GetPreferredExtent(pMe->piwTitle,&we);
if(we.width<(pMe->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代码中找到以下注释行//DISCUSSP1_3。
切记,当调用FreeAppData()时,您将负责删除创建的所有类(例如调用CreateInstance()时)。
7.在widget.c代码中找到以下注释行//DISCUSSP1_4。
此处是响应向上和向下箭头以及更改根容器焦点的调用。
完成后,您可以返回TRUE以表示您已经处理该事件。
8.在widget.c代码中找到以下注释行//DISCUSSP1_5。
使用widgets时,您需要允许widgets基础结构来处理您未处理的事件。
练习2:
将静态文本widgets和文本widgets添加到应用程序
说明
本实验的目的是将两个新widgets添加到应用程序并添加一些代码,以便在按下“选择”键时将文本从现有文本widgets复制到新的静态文本widgets。
您将执行的操作
▪修改现有应用程序以支持静态文本widgets和文本widgets
▪测试修改后的应用程序
在本实验中,您将使用练习1中的应用程序并修改代码。
1.从提供的配套软件中打开本练习中使用的widgets项目。
2.从提供的配套软件中打开本练习中使用的AddedCode.c文件。
对于widgets项目中的每个//INSERT注释:
•阅读说明
•从AddedCode.c文件中复制/粘贴该代码
•在每次修改后保存更改
3.在widget.c代码中找到以下注释行//INSERTP2_1HERE。
要访问文本widgets的容,您需要添加头文件AEETextWidget.h
//StartP2_1
#include"AEETextWidget.h"
//EndP2_1
4.在widget.c代码中找到以下注释行//INSERTP2_2HERE。
您需要在Applet结构中定义两个新的widgets指针。
第一个widgets将保存并显示复制的文本。
第二个widgets保存标题。
//StartP2_2
IWidget*piwCopy;//TextCtlstatictextwidget.
IWidget*piwCpyTitle;//TextCtlstatictextwidget.
//EndP2_2
5.在widget.c代码中找到以下注释行//INSERTP2_3HERE。
以下是标题的文本。
//StartP2_3
staticconstAECHAR*awchCopyTitle=(AECHAR*)L"Thisistheoutput";
//EndP2_3
6.在widget.c代码中找到以下注释行//INSERTP2_4HERE。
这是将执行复制操作的过程的正向定义(代码位于INSERTP2_8步骤中)。
//StartP2_4
staticvoidwidgets_HandleCopy(widgets*pMe);
//EndP2_4
7.在widget.c代码中找到以下注释行//INSERTP2_5HERE。
您应在此处将widgets添加到根容器。
这与您之前对任何文本widgets所执行的操作相同。
请注意,静态文本widgets没有边框,而文本widgets有。
//StartP2_5
//Titlewidgetfortextoutput
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);
//Setextent:
IWIDGET_GetPreferredExtent(pMe->piwCpyTitle,&we);
we.width=(pMe->deviceInfo).cxScreen-we.width-2;
IWIDGET_SetExtent(pMe->piwCpyTitle,&we);
//Setlocation:
dwpos.x=0;
dwpos.y+=oldwe.height+7;
dwpos.bVisible=TRUE;
//Savetheextent:
oldwe=we;
//Insertwidgetintorootcontainer:
(void)IROOTCONTAINER_Insert(pMe->picRoot,
pMe->piwCpyTitle,WIDGET_ZNORMAL,&dwpos);
RELEASEIF(pMe->piwCpyTitle);
//Copywidget
nErr=ISHELL_CreateInstance(pMe->piShell,
AEECLSID_STATICWIDGET,(void**)&(pMe->piwCopy));
if(AEE_SUCCESS!
=nErr){
return(nErr);
}
//Setextent:
IWIDGET_GetPreferredExtent(pMe->piwCopy,&we);
we.width=(pMe->deviceInfo).cxScreen-2;
IWIDGET_SetExtent(pMe->piwCopy,&we);
//Setlocation:
dwpos.x=0;
dwpos.y+=oldwe.height+7;
dwpos.bVisible=TRUE;
//Savetheextent:
oldwe=we;
//Insertwidgetintorootcontainer:
(void)IROOTCONTAINER_Insert(pMe->picRoot,pMe->piwCopy,
WIDGET_ZNORMAL,&dwpos);
//EndP2_5
8.在widget.c代码中找到以下注释行//INSERTP2_6HERE。
调用FreeAppData()时,此代码将删除这两个新widgets。
//StartP2_6
RELEASEIF(pMe->piwCopy);
RELEASEIF(pMe->piwCpyTitle);
//EndP2_6
9.在widget.c代码中找到以下注释行//INSERTP2_7HERE。
应在此处添加代码,以处理按下“选择”键时会发生的情况。
这将调用INSERTP2_8中的一个函数来处理事件。
//StartP2_7
caseAVK_SELECT:
widgets_HandleCopy(pMe);
break;
//EndP2_7
10.在widget.c代码中找到以下注释行//INSERTP2_8HERE。
这是实际执行复制操作的代码。
它将调用IWidg