新手问个BREW MP中GridWidget的问题

mammoth4 2010-04-14 11:56:45
最近开始学做BREW MP,基础太差,许多东西还是一头雾水。昨天开始写个Grid Widget的例子,想简单的只显示个Static就好,可水平太差不知道怎么写。在Wizard生成的代码的基础上参考了 http://topic.csdn.net/u/20091123/18/3c67c251-79c0-45cf-b799-08ca40a839a5.html 一帖中两位仁兄的代码,现写出如下代码,请各位大哥看看小弟哪里写的有问题,谢谢了。

/*=============================================================================
FILE: GridWidgetSample.c
=============================================================================*/

/*-----------------------------------------------------------------------------
Includes and Variable Definitions
-----------------------------------------------------------------------------*/
#include "AEEModGen.h"
#include "AEEAppGen.h"
#include "AEEShell.h"

#include "GridWidgetSample.bid"
#include "GridWidgetSample_res.h"

/* some property definition, like AEERect, ect. */
#include "AEEWProperties.h"

#include "AEERootContainer.h"
#include "AEECLSID_ROOTCONTAINER.bid"

#include "AEEDisplayCanvas.h"
#include "AEECLSID_DISPLAYCANVAS.bid"

#include "AEEListWidget.h"
#include "AEECLSID_GRIDWIDGET.bid"

#include "AEEStaticWidget.h"
#include "AEECLSID_STATICWIDGET.bid"

#include "AEEIDecorator.h"

#include "AEEIVectorModel.h"
#include "AEECLSID_VECTORMODEL.bid"

#ifndef RELEASEIF
#define RELEASEIF(p) ReleaseIf((IBase**)(void*)&p)

//#define ERR_TRY(x) do { nErr = (x); if (nErr) goto ERR_CATCH; } while(0)

static void ReleaseIf(IBase **ppif) {
if (*ppif) {
IBASE_Release(*ppif);
*ppif = 0;
}
}
#endif

/*-----------------------------------------------------------------------------
Applet Structure
-----------------------------------------------------------------------------*/
typedef struct _GridWidgetSample {
AEEApplet applet;
IDisplay * piDisplay;
IShell * piShell;
AEEDeviceInfo deviceInfo;
// Add your own variables here...
IRootContainer *picRootContainer;
IWidget *piwRootWidget;

} GridWidgetSample;

/*-----------------------------------------------------------------------------
Function Prototypes
-----------------------------------------------------------------------------*/
static boolean GridWidgetSample_HandleEvent(GridWidgetSample* pMe, AEEEvent eCode, uint16 wParam, uint32 dwParam);
boolean GridWidgetSample_InitAppData(GridWidgetSample* pMe);
void GridWidgetSample_FreeAppData(GridWidgetSample* pMe);
static void GridWidgetSample_DrawScreen(GridWidgetSample * pMe);

/*-----------------------------------------------------------------------------
Function Definitions
-----------------------------------------------------------------------------*/

/*=============================================================================
FUNCTION: AEEClsCreateInstance
=============================================================================*/
int AEEClsCreateInstance(AEECLSID ClsId, IShell * piShell, IModule * piModule,
void ** ppObj)
{
*ppObj = NULL;

if( AEECLSID_GRIDWIDGETSAMPLE == ClsId ) {
if( TRUE == AEEApplet_New(sizeof(GridWidgetSample),
ClsId,
piShell,
piModule,
(IApplet**)ppObj,
(AEEHANDLER)GridWidgetSample_HandleEvent,
(PFNFREEAPPDATA)GridWidgetSample_FreeAppData) ) {


if(TRUE == GridWidgetSample_InitAppData((GridWidgetSample*)*ppObj)) {
return AEE_SUCCESS; // Data initialized successfully.
}
else {
IApplet_Release((IApplet*)*ppObj);
return AEE_EFAILED;
}
} // End AEEApplet_New
}
return AEE_EFAILED;
}


/*=============================================================================
FUNCTION: GridWidgetSample_InitAppData
=============================================================================*/
boolean GridWidgetSample_InitAppData(GridWidgetSample * pMe)
{
int nErr;
// Save local copy for easy access:
pMe->piDisplay = pMe->applet.m_pIDisplay;
pMe->piShell = pMe->applet.m_pIShell;

// Get the device information for this handset.
pMe->deviceInfo.wStructSize = sizeof(pMe->deviceInfo);
ISHELL_GetDeviceInfo(pMe->applet.m_pIShell,&pMe->deviceInfo);

// Insert your code here for initializing or allocating resources...
nErr = ISHELL_CreateInstance(pMe->piShell, AEECLSID_ROOTCONTAINER, (void *)(&pMe->picRootContainer));
if (AEE_SUCCESS != nErr) {
return FALSE;
}

nErr = IROOTCONTAINER_QueryInterface(pMe->picRootContainer, AEEIID_WIDGET, (void *)(&pMe->piwRootWidget));
if (AEE_SUCCESS != nErr) {
return FALSE;
}

return TRUE;// No failures up to this point, so return success.
}


/*=============================================================================
FUNCTION: GridWidgetSample_FreeAppData
=============================================================================*/
void GridWidgetSample_FreeAppData(GridWidgetSample * pMe)
{
// Insert your code here for freeing any resources you have allocated...

// Example to use for releasing each interface:
// if ( NULL != pMe->piMenuCtl ) { // check for NULL first
// IMenuCtl_Release(pMe->piMenuCtl)// release the interface
// pMe->piMenuCtl = NULL; // set to NULL so no problems later
// }
//
}


/*=============================================================================
FUNCTION: GridWidgetSample_HandleEvent
=============================================================================*/
static boolean GridWidgetSample_HandleEvent(GridWidgetSample* pMe, AEEEvent eCode, uint16 wParam, uint32 dwParam)
{
switch (eCode) {

case EVT_APP_START:
GridWidgetSample_DrawScreen(pMe); // Draw text on display screen.
return TRUE;

case EVT_APP_STOP:
return TRUE;

case EVT_APP_SUSPEND:
return TRUE;

case EVT_APP_RESUME:
GridWidgetSample_DrawScreen(pMe);
return TRUE;

case EVT_APP_MESSAGE:
return TRUE;

case EVT_KEY:
return FALSE;

case EVT_FLIP:
return TRUE;

case EVT_KEYGUARD:
return TRUE;

default:
break;
}
return FALSE; // Event wasn't handled.
}


/*=============================================================================
FUNCTION: GridWidgetSample_DrawScreen
=============================================================================*/
static void GridWidgetSample_DrawScreen(GridWidgetSample * pMe)
{
AEERect rcRoot;
ICanvas *piCanvas;
IWidget *piw, *pisw;
IVectorModel *pivm;
WidgetPos wpos;
WidgetExtent weStatic;
AECHAR pwszText[64] = {0};
int nStrLen = 0;
int nErr;

/* Set Canvas for RootContainer */
SETAEERECT(&(rcRoot), 0, 0, pMe->deviceInfo.cxScreen, pMe->deviceInfo.cyScreen);
nErr = ISHELL_CreateInstance(pMe->piShell, AEECLSID_DISPLAYCANVAS, (void**)&(piCanvas));
if (AEE_SUCCESS != nErr)
{
return;
}

nErr = IDISPLAYCANVAS_SetDisplay((IDisplayCanvas*)(void *)piCanvas, pMe->piDisplay);
if (AEE_SUCCESS != nErr)
{
return;
}

IROOTCONTAINER_SetCanvas(pMe->picRootContainer, piCanvas, &(rcRoot));

RELEASEIF(piCanvas);

nErr = ISHELL_CreateInstance(pMe->piShell, AEECLSID_GRIDWIDGET, (void**)&(piw));
if (AEE_SUCCESS != nErr)
{
return;
}

/* Create the item widget that will be wrapped by the list widget. */
nErr = ISHELL_CreateInstance(pMe->piShell, AEECLSID_STATICWIDGET, (void**)&(pisw));
if (AEE_SUCCESS != nErr)
{
return;
}

/* Identify the value model that is to be associated with this widget. */
nErr = ISHELL_CreateInstance(pMe->piShell, AEECLSID_VECTORMODEL, (void**)&(pivm));
if (AEE_SUCCESS != nErr)
{
return;
}

/* Specify the text to be displayed within the static widget */
nStrLen = ISHELL_LoadResString(pMe->piShell,
GRIDWIDGETSAMPLE_RES_FILE,
IDS_STRING_1001, pwszText, sizeof(pwszText));

if (pwszText)
{
IValueModel *piValueModel = 0;
if (AEE_SUCCESS == IWidget_GetModel(pisw, AEEIID_VALUEMODEL, (IModel **)(void**) &(piValueModel)))
{
IVALUEMODEL_SetText(piValueModel, pwszText, -1);
IValueModel_Release(piValueModel);
}
}

/* Attach the appropriate model to the list. */
nErr = IWidget_SetModel(piw, IVectorModel_to_IModel(pivm));
if (AEE_SUCCESS != nErr)
{
return;
}

/* Wrap the list widget around the item widget, use staticWidget as 'item' widget. */
IDecorator_SetWidget((IDecorator *)(void*) piw, pisw);

IWidget_SetRows(piw, 2);
IWidget_SetCols(piw, 3);

IWidget_GetPreferredExtent(pisw, &weStatic);

/* Set the width and height of the list widget. */
IWidget_SetItemWidth(piw, weStatic.width);
IWidget_SetItemHeight(piw, weStatic.height);

weStatic.width = 200;
weStatic.height = 240;
IWidget_SetExtent(piw, &weStatic);

IWidget_SetBGColor(pisw, MAKE_RGB(0,0,255));

wpos.x = 0;
wpos.y = 0;
wpos.bVisible = TRUE;

IROOTCONTAINER_Insert( pMe->picRootContainer, piw, WIDGET_ZNORMAL, &wpos );

RELEASEIF(piw);
RELEASEIF(pisw);
RELEASEIF(pivm);

}
...全文
2043 5 打赏 收藏 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
twoconk 2010-04-20
  • 打赏
  • 举报
回复
两点哦:
1. 2行3列的GridWidget没有任何内容哦,因为你的pivm Vectormodel里面没有任何数据
2. 就是楼上说的GridWidget每一个item里面的STATICWIDGET没有数据, 解决方法是给ValueModel设置一个Adapte

最好用bmp的例子先看明白哦, 这个理解还是有点复杂的~
mammoth4 2010-04-20
  • 打赏
  • 举报
回复
谢谢楼上两位,这两天在别人指点下已经写出grid slider progress list tab等几个widget了,上来把帖结了,以后有问题还会继续来讨教的,谢谢。
FLYUP_CHEN 2010-04-19
  • 打赏
  • 举报
回复
我大概看了一下你的代码,你的widget应该是已经画上去了,但是文字应该没有显示。不知道是不是这样,文字显示是需要你要给static widget做一个set的动作的,添加一个ValueModel的Listener当值发生改变的时候给staitc widget设置一下文字。
mammoth4 2010-04-16
  • 打赏
  • 举报
回复
呃。是不是我这问题太幼稚了?没人理哦~
mammoth4 2010-04-14
  • 打赏
  • 举报
回复
加了注释超过1万字符了,就把注释基本都去了。请各位大哥教教小弟,谢谢了。
内容概要:本文介绍了一种基于三相四桥臂拓扑结构的动态电压恢复器(DVR),用于补偿电网中由电压不对称跌落引起的电能质量问题。通过Simulink平台构建仿真模型,重点研究了在不平衡负载和电网电压跌落工况下,DVR对负载侧电压的快速补偿能力。系统采用多准PR(Proportional Resonant)并联控制策略,实现对各相电压的独立精确控制,有效抑制负序分量,提升系统在复杂工况下的稳定性和响应性能。仿真结果验证了所提控制方法在电压幅值、相位补偿及波形质量改善方面的有效性,适用于对供电连续性和电能质量要求较高的工业场景。; 适合人群:电力电子、电气工程及其自动化等相关专业的研究生、科研人员及从事电能质量治理的工程技术人员。; 使用场景及目标:①研究动态电压恢复器在电压跌落、三相不平衡等典型电能质量问题中的补偿机制;②掌握三相四桥臂逆变器的建模与多准PR控制策略的设计与实现;③为高精度电能质量调节装置的研发提供理论依据和仿真验证手段。; 阅读建议:建议结合提供的参考文献和说明文档,深入理解控制算法的设计原理,并在Simulink环境中动手复现仿真模型,通过调整故障条件和控制器参数,观察系统动态响应,从而全面掌握DVR的工作特性与优化方法。
内容概要:本文档系统介绍了三相并网逆变器中基于无功功率扰动的孤岛检测控制算法仿真资源,结合Simulink仿真模型与权威参考文献,深入阐述了逆变器在并网运行中的核心控制策略。重点围绕通过主动调节无功功率实现孤岛效应的快速、可靠检测,避免非计划性孤岛运行对电网设备和人员造成安全隐患。资源内容涵盖完整的算法原理分析、控制逻辑架构设计、Simulink仿真模型搭建流程及关键参数整定方法,帮助使用者深刻理解无功扰动法在实际系统中的应用机制,掌握其在不同工况下的动态响应特性和检测盲区规避策略,确保电网的安全稳定运行。; 适合人群:电力电子、新能源发电、电气工程及其自动化等相关专业的高校硕士、博士研究生,从事光伏发电、风力发电等新能源并网系统研发的工程技术人员,以及致力于电力系统保护与控制领域研究的科研人员。; 使用场景及目标:①深入研究并掌握基于无功功率扰动的孤岛检测技术在三相并网逆变器中的具体实现方法与优化路径;②支撑高校课程设计、毕业课题、科研项目申报及工程实践中的仿真验证,深化对并网保护、电网阻抗变化影响及控制策略鲁棒性的理解;③服务于高水平学术论文(如SCI期刊)的算法复现、对比分析与创新性改进。; 阅读建议:建议学习者紧密结合所提供的参考文献与Simulink仿真模型进行同步研习,重点关注控制模块的搭建细节、无功扰动注入方式的选择与参数设计,通过反复仿真调试,探究不同负载条件下孤岛检测的触发阈值与响应时间,从而全面掌握该算法的核心要点与工程应用技巧。

7,916

社区成员

发帖
与我相关
我的任务
社区描述
本论坛以AI、IoT、PC 、XR、Auto等核心板块组成,为开发者提供便捷及高效的学习和交流平台。 高通开发者专区主页:https://qualcomm.csdn.net/
物联网人工智能开源 企业社区 北京·东城区
社区管理员
  • csdnsqst0050
  • chipseeker
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧