如何更改widget状态?

llsll21 2010-08-13 01:06:22
我不知道brew里面有没有“活动”这个词,我想实现当widget A接收到方向键时,使widget B处于活动状态,这时再按方向键,就由B来处理。 我试了
IWidget_MoveFocus(A, B );
IWIDGET_SetSelected(B,false);
IWIDGET_SetSelected(A,true);
IWidget_SetFocus(B,false);
IWidget_SetFocus(A,true);
这几个函数都不行,虽然焦点移动到了B,但按键事件还是被A接收到了,除非用点击一下B,B才能接收到事件,请问要做哪些设置才能让B能按收到事件。请大家帮忙.

注:我的A在一个container_a内,而container_a和B又都是container_main的孩子,我试了把焦点从container_a从移出来,还是不行。

...全文
1702 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wishifef 2010-08-16
  • 打赏
  • 举报
回复
可能是你重载了A或者是B的事件了,
typedef struct _test{
AEEApplet a ;
AEEDeviceInfo DeviceInfo;

IShell *meIshell;//
IDisplay *meIDisplay;
IRootForm *rootForm;
IForm *mainForm;

IXYContainer *mainContainer;

IWidget *text1Widget;
IWidget *text2Widget;
IXYContainer *aContaienr;
} test;


void testFouce(gridWidget1202 *pMe)
{
int result = 0;
WidgetPos wp;
WExtent tsWE;
IWidget *testWidget=NULL;
ISHELL_CreateInstance(pMe->meIshell,AEECLSID_ROOTFORM,(void**)&pMe->rootForm);
result = ISHELL_CreateInstance(pMe->meIshell, AEECLSID_FORM, (void **)&(pMe->mainForm));
result += ISHELL_CreateInstance(pMe->meIshell, AEECLSID_XYCONTAINER, (void **)&pMe->mainContainer);
result += ISHELL_CreateInstance(pMe->meIshell, AEECLSID_XYCONTAINER, (void **)&pMe->aContaienr);
result += ISHELL_CreateInstance(pMe->meIshell,AEECLSID_TEXTWIDGET,(void**)&pMe->text1Widget);
result += ISHELL_CreateInstance(pMe->meIshell,AEECLSID_TEXTWIDGET,(void**)&pMe->text2Widget);


tsWE.height=30;
tsWE.width=150;
IWIDGET_SetExtent(pMe->text1Widget,&tsWE);
wp.x=10;
wp.y=10;
wp.bVisible=TRUE;
result = IXYCONTAINER_Insert(pMe->aContaienr,pMe->text1Widget, WIDGET_ZNORMAL, &wp);

result = IXYCONTAINER_QueryInterface(pMe->aContaienr, AEEIID_WIDGET, (void**)&testWidget);
tsWE.height=150;
tsWE.width=240;
IWIDGET_SetExtent(testWidget,&tsWE);
wp.x=0;
wp.y=0;
wp.bVisible=TRUE;
result = IXYCONTAINER_Insert(pMe->mainContainer,testWidget, WIDGET_ZNORMAL, &wp);

tsWE.height=30;
tsWE.width=180;
IWIDGET_SetExtent(pMe->text2Widget,&tsWE);
wp.x=10;
wp.y=200;
wp.bVisible=TRUE;
result = IXYCONTAINER_Insert(pMe->mainContainer, pMe->text2Widget, WIDGET_ZNORMAL, &wp);

result = IXYCONTAINER_QueryInterface(pMe->mainContainer, AEEIID_WIDGET, (void**)&pMe->m_pWidget);
result += IFORM_SetWidget(pMe->mainForm, WID_FORM, pMe->m_pWidget);
IROOTFORM_PushForm(pMe->rootForm,pMe->mainForm);
}


case EVT_APP_START:testFouce(pMe);return(TRUE);

case EVT_KEY:



if(wParam == AVK_UP)
{
IFORM_GetWidget(pMe->mainForm, WID_FORM, (IWidget **)&pWidget);
IWIDGET_MoveFocus(pWidget, (IWidget *)WIDGET_FOCUS_NEXT);
IWIDGET_Release(pWidget);
}

if(wParam == AVK_DOWN)
{
IFORM_GetWidget(pMe->mainForm, WID_FORM, (IWidget **)&pWidget);
IWIDGET_MoveFocus(pWidget, (IWidget *)WIDGET_FOCUS_PREV);
IWIDGET_Release(pWidget);
}
return(TRUE);
llsll21 2010-08-14
  • 打赏
  • 举报
回复
二楼的大哥,你说的我也试过了,从根容器上移出,也不行。关键问题是能够成功的把焦点移到B上,但接收事件的仍然是A,感觉跟WINDOWS里面的控件没有激活。
strayedbird 2010-08-13
  • 打赏
  • 举报
回复
是不是应该使用 IWidget_MoveFocus(pw, B ); pw是根容器或者container_main对应的widget,不应该用A。
cumtmars 2010-08-13
  • 打赏
  • 举报
回复
发送一个avk_?啊

2,853

社区成员

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

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