当前位置:编程学习 > wap >>

BREW输入法的设置

        我有一个简单的输入界面,一个标准的ITEXTCTL控件,用ITEXTCTL_SetSoftKeyMenu() 关联一个SoftMenu,这样在SoftMenu中会多出一个输入法的菜单项,现在该菜单项会产生一个EVT_COMMAND事件,该事件由ITEXTCTL控件处理,它会弹出一个输入法的选择菜单(同时ITEXTCTL控件被ITEXTCTL_HandleEvent设置成了非机会状态),将菜单的所有事件也都是由ITEXTCTL控件处理(ITEXTCTL_HandleEvent)。
       在我们公司的带键盘的手机上都是这样,没有问题,部分手机虽然没有弹出这个菜单但也正常的切换了输入法。在全触摸无键盘的LGk v500上跟其他带键盘的手机一样正常,但是在其他三个无键盘全触摸的手机(一个是酷派S60、酷派E230、中兴C-X736)就不行了。在由ITEXTCTL控件处理了SoftMenu那个输入法的菜单项的EVT_COMMAND后,就不在处理任何事件了。他正确响应了SoftMenu的输入法的菜单项EVT_COMMAND事件,弹出了OEM输入法菜单,但是之后任何的事件就不能再响应了。
       我之前不通过ITEXTCTL_SetSoftKeyMenu() 关联一个SoftMenu菜单来设置输入法是正常,所有事件在ITEXTCTL控件上就ITEXTCTL控件处理,在菜单上就菜单处理,这都没有问题,也通过了电信的UBT测试。我是奇怪。如果是这些全触摸的手机用到了ITEXTCTL_SetSoftKeyMenu(),该如何处理输入法的设置?一个中兴,一个酷派都出现一样的问题和症状,是不是全触摸无键盘的手机在这里的处理都是一样的,或是OEM在这里有什么约定?


///////////////////////////////////在输入状态下的事件处理函数,其中的ShowSearch是把当前的所有控件重画一遍,并把程序的状态再设置为当前状态。如果你知道问题的答案,加我的Q:281627710,我也可以另外给分

boolean Search_HandleEvent(theApp * pMe, AEEEvent eCode, uint16 wParam, uint32 dwParam)
{
AEERect rc;
AEERect rc2;


if ( IMENUCTL_HandleEvent(pMe->m_MenuForSoft,eCode,wParam,dwParam)  )
{

return TRUE;
}
if (ITEXTCTL_HandleEvent(pMe->m_SearchInput, eCode, wParam, dwParam) )
{

return TRUE;
}

switch (eCode)
{
case EVT_POINTER_DOWN:
{
IMENUCTL_GetRect(pMe->m_MenuForSoft,&rc) ;
ITEXTCTL_GetRect(pMe->m_SearchInput,&rc2);
if(Is_PT_In_Rect(pMe,&rc))
{
ITEXTCTL_SetActive(pMe->m_SearchInput,FALSE);
if(IMENUCTL_IsActive(pMe->m_MenuForSoft))
{

if( IMENUCTL_HandleEvent(pMe->m_MenuForSoft,eCode,wParam,dwParam) )
{
return TRUE;
}
}
else 
{
IDISPLAY_ClearScreen(pMe->a.m_pIDisplay);
IMENUCTL_SetActive(pMe->m_MenuForSoft,TRUE);
IMENUCTL_Redraw(pMe->m_MenuForSoft);
ITEXTCTL_Redraw(pMe->m_SearchInput);
IDISPLAY_Update(pMe->a.m_pIDisplay);
return TRUE;
}

}
else if(Is_PT_In_Rect(pMe,&rc2))
{
IMENUCTL_SetActive(pMe->m_MenuForSoft,FALSE);
if(ITEXTCTL_IsActive(pMe->m_SearchInput))
{
if( ITEXTCTL_HandleEvent(pMe->m_SearchInput,eCode,wParam,dwParam) )
{
return TRUE;
}
}
else 
{
IDISPLAY_ClearScreen(pMe->a.m_pIDisplay);
ITEXTCTL_SetActive(pMe->m_SearchInput,TRUE);
IMENUCTL_Redraw(pMe->m_MenuForSoft);
ITEXTCTL_Redraw(pMe->m_SearchInput);
IDISPLAY_Update(pMe->a.m_pIDisplay);
return TRUE;

}
}
if (ITEXTCTL_HandleEvent(pMe->m_SearchInput,eCode,wParam,dwParam))
{
return TRUE;
}
if (IMENUCTL_HandleEvent(pMe->m_MenuForSoft,eCode,wParam,dwParam))
{
return TRUE;
}

}
return TRUE;
case EVT_COMMAND:
{
if(ITEXTCTL_HandleEvent(pMe->m_SearchInput, eCode, wParam, dwParam) )
{
return TRUE;
}

Search_OnCommand(pMe,wParam);
}
return TRUE;
case EVT_KEY:
{
switch(wParam)
{
case AVK_SELECT:
{
if(ITEXTCTL_IsActive(pMe->m_SearchInput))
{
MEMSET(pMe->m_pszSearchText,0,sizeof(pMe->m_pszSearchText));
ITEXTCTL_GetText(pMe->m_SearchInput,(AECHAR*)pMe->m_pszSearchText,MAX_INPUT_LEN);
}
IDISPLAY_ClearScreen(pMe->a.m_pIDisplay);
IMENUCTL_Redraw(pMe->m_MenuForSoft);
ITEXTCTL_Redraw(pMe->m_SearchInput);
IDISPLAY_Update(pMe->a.m_pIDisplay);

if (ITEXTCTL_HandleEvent(pMe->m_SearchInput,eCode,wParam,dwParam))
{
return TRUE;
}
if (IMENUCTL_HandleEvent(pMe->m_MenuForSoft,eCode,wParam,dwParam))
{
return TRUE;
}
}
return TRUE;
case AVK_CLR:
{
if(!(ITEXTCTL_IsActive(pMe->m_SearchInput)) && !(IMENUCTL_IsActive(pMe->m_MenuForSoft)) && !pMe->m_bSuspend)
{

MEMSET(pMe->m_pszSearchText,0,sizeof(pMe->m_pszSearchText));
ITEXTCTL_GetText(pMe->m_SearchInput,(AECHAR*)pMe->m_pszSearchText,MAX_INPUT_LEN);
ShowSearch(pMe);
return TRUE;

}

if((ITEXTCTL_IsActive(pMe->m_SearchInput) && ITEXTCTL_GetCursorPos(pMe->m_SearchInput)==0)||
IMENUCTL_IsActive(pMe->m_MenuForSoft))
{
ITEXTCTL_SetActive(pMe->m_SearchInput,FALSE);
IMENUCTL_SetActive(pMe->m_MenuForSoft,FALSE);
ReadyForMainMenu(pMe);
ShowMainMenu(pMe);
}
else 
{
if(ITEXTCTL_IsActive(pMe->m_SearchInput))
{
if(ITEXTCTL_HandleEvent(pMe->m_SearchInput,eCode,wParam,dwParam))
return TRUE;
}
}
}
return TRUE;
}

}
return ITEXTCTL_HandleEvent(pMe->m_SearchInput, eCode, wParam, dwParam);
case EVT_APP_SUSPEND:
MEMSET(pMe->m_pszSearchText,0,sizeof(pMe->m_pszSearchText));
ITEXTCTL_GetText(pMe->m_SearchInput,(AECHAR*)pMe->m_pszSearchText,MAX_INPUT_LEN);
ITEXTCTL_SetActive(pMe->m_SearchInput,FALSE);
IMENUCTL_SetActive(pMe->m_MenuForSoft,FALSE);
return TRUE;
case EVT_APP_RESUME:
ShowSearch(pMe);
return TRUE;
default:
{
if(ITEXTCTL_HandleEvent(pMe->m_SearchInput,eCode,wParam,dwParam) )
{
return TRUE;
}

if (IMENUCTL_HandleEvent(pMe->m_MenuForSoft,eCode,wParam,dwParam) )
{
return TRUE;
}
}
return FALSE;
}

return FALSE;
} --------------------编程问答--------------------  这都没人回答,分不够还是咋滴? --------------------编程问答-------------------- 全触摸手机的实现上有些不同 --------------------编程问答-------------------- 有什么不同?怎么个不同法啊 --------------------编程问答-------------------- 问题解决了吗?
我适配过COOLPAD_E230输入法。
补充:移动开发 ,  Brew
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,