从原界面A,跳转到新界面B,
在代码中看,一般用两个文件,实现两个界面。
当在界面A文件中调用了界面B文件的一个进入函数,就会跳转。
Q:界面B的进入函数怎么写?
A;总结,如果抛开函数和代码,只看逻辑,就会有如下六个步骤:
- 申 请 节 点 (设置自定义的屏幕的进入和离开的回调函数)
- 添 加 节 点
- 判断能否进入新屏幕
- 开启画界面的逻辑(设置自定义画界面的回调函数)
- 设置按键的响应函数 (设置自定义按键的响应函数)
- 设置关闭当前屏幕的按键
只看代码逻辑,就会有如下步骤:
//第一,申 请 节 点
s_iboxpay_scanreceipt_group_id = mmi_frm_group_create(GRP_ID_ROOT, GRP_ID_AUTO_GEN,
NULL/*进入时回调函数*/, NULL/*推出时回调函数*/);
//第二,添 加 节 点
mmi_frm_group_enter(s_iboxpay_scanreceipt_group_id, MMI_FRM_NODE_SMART_CLOSE_FLAG);
//第三,判断能否进入新屏幕
if(mmi_frm_scrn_enter(s_iboxpay_scanreceipt_group_id, SCREEN_ID_IBOXPAY_SACN_RECEIPT, NULL,
/*自身函数*/, MMI_FRM_FULL_SCRN) == MMI_FALSE)
{
return;
}
//第四,开启画界面的逻辑,调用系统模板函数
PosShowCommon1Category(
IBOXPAY_STR_ID_SCAN_PAY, // title
IBoxPayDrawScanReceControlArea, // 画出 ControlArea 的函数
IBoxPayExitScanReceCommonCategory);
//第五,设置按键的响应函数 0-9 and clean key click func
SetGroupKeyHandler(
ibox_scan_receipt_handle_key_group/*响应函数*/,
(PU16)s_input_digital_all_keys/*按键集*/,
ARRAY_SIZE(s_input_digital_all_keys),
KEY_EVENT_DOWN/*按下按键就触发*/);
//第六,设置关闭当前屏幕的按键
SetKeyHandler(mmi_frm_scrn_close_active_id/*关闭当前屏幕*/, KEY_RSK/*右键*/, KEY_EVENT_UP/*抬起按键触发*/);// 右键关闭屏幕
真实的代码如下:
static U16 s_iboxpay_scanreceipt_group_id ;
// 该文件的入口函数
extern void EntryIBoxPayScanReceipt(void)
{
//申 请 节 点
s_iboxpay_scanreceipt_group_id = mmi_frm_group_create(GRP_ID_ROOT, GRP_ID_AUTO_GEN,
NULL/*进入时回调函数*/, NULL/*推出时回调函数*/);
//添 加 节 点
mmi_frm_group_enter(s_iboxpay_scanreceipt_group_id, MMI_FRM_NODE_SMART_CLOSE_FLAG);
//下 一 步
mmi_iboxpay_scanrece_entry();
}
分支:进入时回调函数,一般有如下实现
static MMI_RET mmi_ryxpay_enter_mainmenu_proc(mmi_event_struct *evt)
{
switch(evt->evt_id)
{
case EVT_ID_GROUP_DEINIT:
break;
default:
break;
}
return MMI_RET_OK;
}
回到主线逻辑
// 开始画界面,设置按键响应的主逻辑函数
static void mmi_iboxpay_scanrece_entry(void)
{
// 判断能否进入新屏幕
// SCREEN_ID_IBOXPAY_SACN_RECEIPT 需要声明
// 屏幕id,仅在同应用路径下的.res 文件声明即可
if(mmi_frm_scrn_enter(s_iboxpay_scanreceipt_group_id, SCREEN_ID_IBOXPAY_SACN_RECEIPT, NULL,
mmi_iboxpay_scanrece_entry/*自身函数*/, MMI_FRM_FULL_SCRN) == MMI_FALSE)
{
return;
}
// 开启画界面的逻辑,调用系统模板函数
PosShowCommon1Category(
IBOXPAY_STR_ID_SCAN_PAY, // title
IBoxPayDrawScanReceControlArea, // 画出 ControlArea 的函数
IBoxPayExitScanReceCommonCategory);
// 设置按键相应函数 0-9 and clean key click func
SetGroupKeyHandler(
ibox_scan_receipt_handle_key_group/*响应函数*/,
(PU16)s_input_digital_all_keys/*按键集*/,
ARRAY_SIZE(s_input_digital_all_keys),
KEY_EVENT_DOWN/*按下按键就触发*/);
// 设置关闭当前屏幕的按键
SetKeyHandler(mmi_frm_scrn_close_active_id/*关闭当前屏幕*/, KEY_RSK/*右键*/, KEY_EVENT_UP/*抬起按键触发*/);// 右键关闭屏幕
}
分支:IBoxPayDrawScanReceControlArea, // 画出 ControlArea 的函数
可以参考:Mtk功能机,画界面的函数集
回到主线逻辑:
// 点击按钮,回调函数
static void ibox_scan_receipt_handle_key_group(void)
{
U16 key_code, key_type;
// 获取点击的按钮
GetkeyInfo(&key_code, &key_type);
// 处理逻辑
switch(key_code)
{
case KEY_0:
// 点击0 的处理逻辑
break;
case KEY_CLEAR:
// 点击“C”按钮的处理逻辑
break;
default:
break;
}
}
网友评论