美文网首页
Mtk功能机,进入新界面

Mtk功能机,进入新界面

作者: Guoke24 | 来源:发表于2018-11-25 14:26 被阅读0次

从原界面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;
          }
}

相关文章

网友评论

      本文标题:Mtk功能机,进入新界面

      本文链接:https://www.haomeiwen.com/subject/ooepqqtx.html