急!我写了一个TABWIDGET但是无法显示,请大家帮忙看看哪里有问题 谢谢

wolfcao8 2009-12-16 05:32:29
我写了一个TABWIDGET但是无法显示,只能显示CARDCONTAINER里面的内容 请大家帮忙看看哪里有问题 谢谢
显示的结果如下




代码:
int result;
IWidget *containerWdg = NULL;
WidgetPos wp;
WExtent we;
AECHAR *staticText;
ScrollText scrollText;
// int i =0;

IWidget *staticWdg;
IWidget *iWdg;
IWidget *sWdg;

IBitmap *imageTitle = NULL;

AECHAR *pTemp;
// BitmapStaticInfo *info = NULL;
uint16 i = 0;
uint16 image_id;
uint16 string_id;

IWidget *imageWdg;

IDecorator *piDecorator = NULL;

result = ISHELL_CreateInstance(pMe->pIShell, AEECLSID_FORM, (void **)&pMe->mainForm);

//wade start
result += ISHELL_CreateInstance(pMe->pIShell, AEECLSID_CARDCONTAINER, (void **)&pMe->mainContainer);
result += ISHELL_CreateInstance(pMe->pIShell, AEECLSID_TABWIDGET, (void **)&pMe->tabWdg);
result += ISHELL_CreateInstance(pMe->pIShell, AEECLSID_VECTORMODEL, (void **)&pMe->vectorMod);

result += ISHELL_CreateInstance(pMe->pIShell, AEECLSID_IMAGESTATICWIDGET, (void **)&staticWdg);
result += ISHELL_CreateInstance(pMe->pIShell, AEECLSID_STATICWIDGET, (void **)&sWdg);
result += ISHELL_CreateInstance(pMe->pIShell, AEECLSID_BITMAPWIDGET, (void **)&iWdg);

result += ISHELL_CreateInstance(pMe->pIShell, AEECLSID_STATICWIDGET, (void **)&pMe->staticWdg);

if(result != 0)
return EFAILED;

IWIDGET_SetFlags(iWdg, IDF_ALIGN_MIDDLE);
IWIDGET_SetImageStaticImageWidget(staticWdg, iWdg);
IWIDGET_SetImageStaticStaticWidget(staticWdg, sWdg);
IWIDGET_SetModel(pMe->tabWdg, (IModel *)pMe->vectorMod);


IFORM_SetResText(pMe->mainForm, FID_TITLE,BUIW01_RES_FILE, IDS_TITLE);
IFORM_SetSoftkeys(pMe->mainForm, BUIW01_RES_FILE, IDS_SOFTKEY1, IDS_SOFTKEY2);




HANDLERDESC_Init(&pMe->mainFormHandler, MainFormHandleEvent, pMe, mainFormFree);
IFORM_SetHandler(pMe->mainForm, &pMe->mainFormHandler);

IWIDGET_SetSelectedBGColor(staticWdg, MAKE_RGB(78, 130, 188));
IWIDGET_SetSelectedFGColor(staticWdg, MAKE_RGB(255, 255, 255));
IWIDGET_SetActiveFGColor(staticWdg, MAKE_RGB(255, 255, 0));
IWIDGET_SetFlags(staticWdg, IDF_ALIGN_MIDDLE);
IDECORATOR_SetWidget((IDecorator *)pMe->tabWdg, staticWdg);


IWIDGET_QueryInterface(pMe->tabWdg, AEEIID_DECORATOR, (void**) &piDecorator);
ICARDCONTAINER_QueryInterface(pMe->mainContainer, AEEIID_WIDGET, &containerWdg);

IDECORATOR_SetWidget((IDecorator *)piDecorator, containerWdg);


{
IValueModel *pValueMod;
IWIDGET_GetModel(staticWdg, AEEIID_VALUEMODEL, (IModel **)&pValueMod);
IVALUEMODEL_AdaptSet(pValueMod, (PFNADAPTSET)ListItemValueAdaptSet, pMe);
IVALUEMODEL_Release(pValueMod);
}

for(i=0;i<2;i++)
{
image_id=IDI_OBJECT_5001+i;
string_id=IDS_SOFTKEY1;

imageTitle = ISHELL_LoadResBitmap(pMe->pIShell, BUIW01_RES_FILE, image_id);//pMe->a.m_pIShell
pTemp = MALLOC(100);
ISHELL_LoadResString(pMe->pIShell, BUIW01_RES_FILE, string_id, pTemp, 100);
pMe->ListInfo[i].pwText = pTemp;
pMe->ListInfo[i].piImage = imageTitle;
IVECTORMODEL_Add(pMe->vectorMod, &pMe->ListInfo[i]);
}




we.height = 50;
we.width = 270;
IWIDGET_SetExtent(pMe->staticWdg, &we);
IWIDGET_SetBorderWidth(pMe->staticWdg, 1);
IWIDGET_SetBorderColor(pMe->staticWdg, MAKE_RGB(255, 255, 0));
staticText = MALLOC(100);
result = ISHELL_LoadResString(pMe->pIShell, BUIW01_RES_FILE, IDS_STATIC01+1, staticText, 100);
IWIDGET_SetText(pMe->staticWdg, staticText, TRUE);
IWIDGET_SetFlags(pMe->staticWdg, IDF_ALIGN_CENTER | IDF_ALIGN_MIDDLE);


wp.x = 0;
wp.y = 0;
wp.bVisible = TRUE;
ICARDCONTAINER_Insert(pMe->mainContainer, pMe->staticWdg, WIDGET_ZNORMAL, &wp);
//*/

result = ICARDCONTAINER_QueryInterface(pMe->mainContainer, AEEIID_WIDGET, &containerWdg);
//IWIDGET_QueryInterface(pMe->tabWdg, AEEIID_WIDGET, (void**) &containerWdg);
result += IFORM_SetWidget(pMe->mainForm, WID_FORM, containerWdg);
if(result != 0)
return EFAILED;


IWIDGET_Release(pMe->tabWdg);
IWIDGET_Release(containerWdg);
...全文
2050 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wolfcao8 2009-12-18
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 givenup 的回复:]
可以先设置一下tabwidget的大小,然后给tabwidgt设置一下背景色,确认其已经在form中,相信可以解决的。good luck
[/Quote]

HI GIVE UP 我又回来做BMP平台了 TAB WIDGET我显示出来了 把写出来的东西放上来给以后学习的人参考

int result;
IWidget *containerWdg = NULL;
WidgetPos wp;
WExtent we;
AECHAR *staticText;
ScrollText scrollText;
// int i =0;

IWidget *staticWdg;
IWidget *iWdg;
IWidget *sWdg;

IBitmap *imageTitle = NULL;

AECHAR *pTemp;
// BitmapStaticInfo *info = NULL;
uint16 i = 0;
uint16 image_id;
uint16 string_id;

IWidget *imageWdg;

IDecorator *piDecorator = NULL;


result = ISHELL_CreateInstance(pMe->pIShell, AEECLSID_FORM, (void **)&pMe->mainForm);

//wade start
result += ISHELL_CreateInstance(pMe->pIShell, AEECLSID_CARDCONTAINER, (void **)&pMe->mainContainer);
result += ISHELL_CreateInstance(pMe->pIShell, AEECLSID_TABWIDGET, (void **)&pMe->tabWdg);


result += ISHELL_CreateInstance(pMe->pIShell, AEECLSID_STATICWIDGET, (void **)&pMe->staticWdg);
if(result != 0)
return EFAILED;

IFORM_SetResText(pMe->mainForm, FID_TITLE,BUIW01_RES_FILE, IDS_TITLE);
IFORM_SetSoftkeys(pMe->mainForm, BUIW01_RES_FILE, IDS_SOFTKEY1, IDS_SOFTKEY2);

HANDLERDESC_Init(&pMe->mainFormHandler, MainFormHandleEvent, pMe, mainFormFree);
IFORM_SetHandler(pMe->mainForm, &pMe->mainFormHandler);

ICARDCONTAINER_QueryInterface(pMe->mainContainer, AEEIID_WIDGET, &containerWdg);
IDECORATOR_SetWidget((IDecorator *)pMe->tabWdg, containerWdg);



IWidget_GetModel(pMe->tabWdg, AEEIID_IVectorModel, (IModel**)(void**) &pMe->vectorMod);
IVectorModel_SetPfnFree(pMe->vectorMod, (PFNNOTIFY)VectorFree);


for(i=0;i<2;i++)
{
image_id=IDI_OBJECT_5001;
string_id=IDS_SOFTKEY1;

imageTitle = ISHELL_LoadResImage(pMe->pIShell, BUIW01_RES_FILE, image_id);//pMe->a.m_pIShell
pTemp = MALLOC(100);
ISHELL_LoadResString(pMe->pIShell, BUIW01_RES_FILE, string_id, pTemp, 100);
pMe->ListInfo[i].pwText = pTemp;
pMe->ListInfo[i].piImage = imageTitle;
IVECTORMODEL_Add(pMe->vectorMod, &(pMe->ListInfo[i]));
}


we.height = 50;
we.width = 50;
IWIDGET_SetExtent(pMe->staticWdg, &we);
IWIDGET_SetBorderWidth(pMe->staticWdg, 1);
IWIDGET_SetBorderColor(pMe->staticWdg, MAKE_RGB(255, 0, 0));
staticText = MALLOC(100);
string_id=IDS_SOFTKEY1;
result = ISHELL_LoadResString(pMe->pIShell, BUIW01_RES_FILE, string_id, staticText, 100);
result = IWIDGET_SetText(pMe->staticWdg, staticText, TRUE);
result = IWIDGET_SetFlags(pMe->staticWdg, IDF_ALIGN_CENTER | IDF_ALIGN_MIDDLE);

result = ICARDCONTAINER_Insert(pMe->mainContainer, pMe->staticWdg, WIDGET_ZNORMAL);


IWidget_SetFlags(pMe->tabWdg, 0 | TABWF_WRAP | TABWF_SHOWBORDER);
IWidget_SetPadding(pMe->tabWdg, 0);
IWidget_SetActiveBorderWidth(pMe->tabWdg, 2);
IWidget_SetInactiveBorderWidth(pMe->tabWdg, 1);
IWidget_SetInactiveBorderColor(pMe->tabWdg, MAKE_RGBA(0x7B,0x7D,0xA5,255));
IWidget_SetActiveBorderColor(pMe->tabWdg,MAKE_RGB(255, 255, 0)/* MAKE_RGBA(0x7B,0x7D,0xA5,255)*/);
IWidget_SetInactiveBGColor(pMe->tabWdg, MAKE_RGBA(0xEF,0xEF,0xFF,255));
IWidget_SetActiveBGColor(pMe->tabWdg, MAKE_RGBA(0xc0,0xff,0xe0,255));

IWidget_SetBorderWidth(containerWdg, 0);
IWidget_SetBGColor(containerWdg, RGBA_WHITE);



//result = ICARDCONTAINER_QueryInterface(pMe->mainContainer, AEEIID_WIDGET, &containerWdg);
//result = IXYContainer_QueryInterface(pMe->mainContainer1, AEEIID_WIDGET, &containerWdg);
//IWIDGET_QueryInterface(pMe->tabWdg, AEEIID_WIDGET, (void**) &containerWdg);

result += IFORM_SetWidget(pMe->mainForm, WID_FORM, pMe->tabWdg);
if(result != 0)
return EFAILED;


IWIDGET_Release(pMe->tabWdg);
IWIDGET_Release(containerWdg);

谢谢大家的帮忙 感谢~
givenup 2009-12-17
  • 打赏
  • 举报
回复
result += IFORM_SetWidget(pMe->mainForm, WID_FORM, containerWdg);
在调用这句话的时候,第三个参数应该是你创建的tabwidget,因为tabwidget已经成为了containerWdg的parent,而你只把containerWdg放到中,所以看不到tab吧
givenup 2009-12-17
  • 打赏
  • 举报
回复
可以先设置一下tabwidget的大小,然后给tabwidgt设置一下背景色,确认其已经在form中,相信可以解决的。good luck
wolfcao8 2009-12-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 givenup 的回复:]
result += IFORM_SetWidget(pMe->mainForm, WID_FORM, containerWdg);
在调用这句话的时候,第三个参数应该是你创建的tabwidget,因为tabwidget已经成为了containerWdg的parent,而你只把containerWdg放到中,所以看不到tab吧
[/Quote]

我今天也发现了这个问题 把改成了
IFORM_SetWidget(pMe->mainForm, WID_FORM, pMe->tabWdg);
结果发现显示是一片空白 连FORM的TITLE都没有了
如果不向CARDCONTAINER里插入内容,就只显示FORM的内容,其他不显示
还有什么地方有问题呀 ?
FLYUP_CHEN 2009-12-16
  • 打赏
  • 举报
回复
我试了一下发现了一些问题
首先:ICARDCONTAINER_Insert(pMe->mainContainer, pMe->staticWdg, WIDGET_ZNORMAL, &wp);
这个的参数都不对,它只有3个参数
其次:IWIDGET_QueryInterface(pMe->tabWdg, AEEIID_DECORATOR, (void**) &piDecorator);
ICARDCONTAINER_QueryInterface(pMe->mainContainer, AEEIID_WIDGET, &containerWdg);

IDECORATOR_SetWidget((IDecorator *)piDecorator, containerWdg);
这几句也不对,你是要把TabWdg要放到container中吧,为什么却要反着来呢,这几句可以去掉了

在最后加上ICARDCONTAINER_Insert(me->mainContainer, me->tabWdg, WIDGET_ZNORMAL);
将ICARDCONTAINER_Insert(me->mainContainer, me->staticWdg, WIDGET_ZNORMAL);这一句注释掉,应该就可以显示出来了

我也没有怎么用过cardcontainer,所以还不是很理解,只是大概看了一下,如果了解清楚了再做解释
FLYUP_CHEN 2009-12-16
  • 打赏
  • 举报
回复
感觉做法应该是正确的,但是你把数据放到了pMe->vectorMod中也添加了相应Adpet但是image和text是在什么时候setting的呢,我没有具体去运行你的程序,但是我觉得你应该给valuemodel添加一个listener函数,然后在相应的事件中去把相应的image和text set到相应的widget中

2,851

社区成员

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

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