背景

斯凯冒泡MRP软件之后台源码

4个月前 国机回忆 43°C

斯凯冒泡MRP软件之后台源码


#include "mrc_base.h"
#include "mrc_win.h"

#include "Helloworld.h"

typedef struct
{
int32 appid;   //app id
uint8  describe[20];     //应用标志符 - "                                                                                                   ipqq"
uint8*  param;     //预留扩展用
}mr_backstage_st;

int32 MINApp(int32 appid);//程序进入后台 
int32 hand;//定时器句柄 
void AwakeApp(int32 appid)//定时器回调函数 (唤醒程序) 

int32 MINApp(int32 appid)//子函数-进入后台 
{
       mr_backstage_st  backRunIn;//定义一个 mr_backstage_st类型的变量 backRunIn--调用后台需要用到 
       int32 ret = MR_FAILED; //定义一个int32类型的变量ret--标记后台是否进入成功并作为函数的返回值返回 
 
       memset(&backRunIn,0,sizeof(mr_backstage_st));//使创建的变量 backRunIn内容全部为0 
       backRunIn.appid = appid;//赋值--使变量 backRunIn.appid等于函数的形参appid 
       ret = mrc_platEx(1004, (uint8*)&backRunIn, sizeof(mr_backstage_st), 0, 0, 0);//调用后台接口实现程序后台 
       return ret;//向主程序返回调用后台的结果 
}

void AwakeApp(int32 appid)//子函数-退出后台 
{
        int32 ret = MR_FAILED;
        mrc_timerStop (hand);//程序退出后台后停止定时器计时(计时器任务已完成)      
        ret =  mrc_plat(1003,203103);//将程序由后台转到前台 
        if (ret == MR_SUCCESS)//如果返回前台成功 
        {
            mrc_plat(1006,203103); //销毁桌面的后台图标 
            mrc_winResume();//恢复窗口正常运行显示 
        }
}

void DemoWinWinEvent(int32 data, int32 eventId)//窗口的状态事件--下面有介绍 
{
    switch (eventId)//switch语句的使用参照发给你的资料(基本语句) 
    {
    case WIN_EVENT_SHOW:
    case WIN_EVENT_REFRESH:    
        mrc_clearScreen(0, 0, 0);//清屏(使屏幕的眼色为全黑色) 
        mrc_drawText("--小焕加油--", 40, 152, 255, 255, 255, 0, MR_FONT_MEDIUM);//写文字位置X40,Y152;眼色RGB值:255, 255, 255;编码方式:0 GB;1  ASCIA 
        mrc_refreshScreen(0, 0, 240, 320);//刷新屏幕 
        hand=mrc_timerCreate(); //创建定时器但没有启动,只做好初始化工作 
        break;
    case WIN_EVENT_PAUSE:
        break;
    case WIN_EVENT_EXIT:
        break;
    case WIN_EVENT_UPDATE:
        break;
    }
}

void DemoKeyWinEvent(int32 data, int32 type, int32 p1, int32 p2)//按键检测事件 
{
    if(MR_KEY_PRESS == type)
    {
        switch(p1)
        {
        case MR_KEY_SOFTRIGHT://如果按了右软件 
            mrc_winClose();//关闭最上层窗口 
            mrc_exit();//退出程序 
            break;
        case MR_KEY_SOFTLEFT://如果按了左软件 
            mrc_timerStart ( hand, 30000, 0,AwakeApp, 0); //定时器启动--30000毫秒后启动定时器,当定时器启动后,30000毫秒既30秒一到,自动调用 AwakeApp唤醒后台的子程序以实现后台定时返回 
            MINApp(203103);//调用后台子程序,使程序进入后台 
            break;

        }
    }
    else if(MR_MOUSE_UP == type)
    {
    }
}

/*
应用初始化函数
该函数在应用初始化期间被mythroad平台调用,可以在这个
函数中进行全局变量的初始化等工作。
返回值:
MR_SUCCESS  应用初始化成功
MR_FAILED      应用初始化失败
*/
int32 mrc_init(void)
{
    mrc_winInit();//初始化软件入口 
    
    mrc_winNew(0, DemoWinWinEvent, DemoKeyWinEvent);//创建窗口及对应的事件检测 

    return MR_SUCCESS;
}



/*
应用事件函数
该函数在应用运行期间,每当mythroad平台收到事件时
被调用
输入:
code:
      code的可能取值如下:
enum {
   MR_KEY_PRESS,           //按键按下事件
   MR_KEY_RELEASE,        //按键释放事件
   MR_MOUSE_DOWN,       //触摸屏(鼠标)按下事件
   MR_MOUSE_UP,            //触摸屏(鼠标)抬起/释放事件
   MR_MENU_SELECT,       //菜单选中事件
   MR_MENU_RETURN,       //菜单返回事件
   MR_DIALOG_EVENT,      // 对话框/编辑框/文本框事件
   MR_EVENT02,             //VM保留,请不要使用
   MR_EXIT_EVENT,           //应用退出事件
   MR_EVENT03,                 //VM保留,请不要使用
   MR_LOCALUI_EVENT         //本地化接口事件
};

param0:
   当code为MR_KEY_PRESS或MR_KEY_RELEASE时,param0的可能取值如下:
enum {
   MR_KEY_0,               //按键 0
   MR_KEY_1,               //按键 1
   MR_KEY_2,               //按键 2
   MR_KEY_3,               //按键 3
   MR_KEY_4,               //按键 4
   MR_KEY_5,               //按键 5
   MR_KEY_6,               //按键 6
   MR_KEY_7,               //按键 7
   MR_KEY_8,               //按键 8
   MR_KEY_9,               //按键 9
   MR_KEY_STAR,            //按键 *
   MR_KEY_POUND,           //按键 #
   MR_KEY_UP,              //按键 上
   MR_KEY_DOWN,            //按键 下
   MR_KEY_LEFT,            //按键 左
   MR_KEY_RIGHT,           //按键 右
   MR_KEY_POWER,           //按键 挂机键
   MR_KEY_SOFTLEFT,        //按键 左软键
   MR_KEY_SOFTRIGHT,       //按键 右软键
   MR_KEY_SEND,            //按键 接听键
   MR_KEY_SELECT,          //按键 确认/选择(若方向键中间有确认键,建议设为该键)
   MR_KEY_VOLUME_UP,          //按键 侧键上
   MR_KEY_VOLUME_DOWN,          //按键 侧键下
   MR_KEY_NONE             //按键 保留
};
当code为MR_MOUSE_DOWN或MR_MOUSE_UP时,param0为屏幕的x坐标;
当code为MR_MENU_SELECT时,param0为菜单index;
当code为MR_DIALOG_EVENT时,param0的可能取值如下:
enum {
   MR_DIALOG_KEY_OK,         //对话框/文本框等的"确定"键被点击(选择)
   MR_DIALOG_KEY_CANCEL  //对话框/文本框等的"取消"("返回")键被点击(选择)
};
当code为MR_LOCALUI_EVENT时,param0的可能取值如下:
enum {
   MR_LOCALUI_KEY_OK,       //本地控件的"确定"键被点击(选择)
   MR_LOCALUI_KEY_CANCEL//本地控件的"取消"("返回")键被点击(选择)
};

param1:
当code为MR_MOUSE_DOWN或MR_MOUSE_UP时,param1为屏幕的y坐标;

返回值:
MR_SUCCESS  操作成功
MR_FAILED      操作失败
*/
int32 mrc_appEvent(int32 code, int32 param0, int32 param1)//软件的各种事件检测函数 
{
    if (code==MR_LOCALUI_EVENT&&param0==MR_LOCALUI_APPRESUME)  //如果用户点击桌面的触摸屏上的后台图标 
    {
    mrc_winResume();//恢复窗口正常运行 
    mrc_timerStop (hand); //停止定时器的运行(重新给定时器赋值为了使程序马上结束后台) 
    mrc_timerStart ( hand,100, 0,AwakeApp, 0);//定时器重新启动100毫秒后调用 AwakeApp函数使程序马上转入后台 
    }
    mrc_winEvent(code, param0, param1);//程序正常运行时所做的按键既事件检测函数 
    return MR_SUCCESS;//向主程序返回 MR_SUCCESS
}

/*
应用暂停函数
该函数在应用被暂停时(有电话等事件暂停应用)
被mythroad平台调用。
返回值:
MR_SUCCESS  操作成功
MR_FAILED      操作失败
*/
int32 mrc_pause(void)
{
    return 0;
}

/*
该函数在应用恢复运行时被mythroad平台调用。
返回值:
MR_SUCCESS  操作成功
MR_FAILED      操作失败
*/
int32 mrc_resume(void)
{

    mrc_winResume();

    return 0;
}

/*
该函数在应用退出时被mythroad平台调用。
返回值:
MR_SUCCESS  操作成功
MR_FAILED      操作失败
*/
int32 mrc_exitApp(void)
{
    return 0;
}
                                                                                                                                                                                                        

另外一份
代码(以240*320屏幕为例,以hello world为模板)


int32 g_backrun; //定义一个timer

int32 max_backNum,backNum; //后台事件判断backNum=已经后台时间,max_backNum=设置返回时间。

void drawMain() //画窗口,也作自动返回调用

{

    mrc_clearScreen(0,0,0);

    mrc_drawText( "测试后台" ,2,2,204,204,204,0,MR_FONT_MEDIUM);

    mrc_refreshScreen(0,0,240,320);

}

void callAwake(int32 data) //这个是g_backrun每触发一次的回调函数

{

    if (backNum//未达到设置的唤醒时间则继续
     {
        backNum++;     //每timer一次+1
    }else
    {
        mrc_timerStop(g_backrun);
        mrc_timerDelete (g_backrun);
        //请在本行写上唤醒函数(如果你有后台接口,他的例子里会有这个AwakeApp())
        mrc_winResume();     //唤醒成功后恢复窗口

        drawMain() ;    //画主窗口,恢复界面。
     }

}

//下面的是按键事件的进入后台运行处理

void DemoKeyWinEvent(int32 data, int32 type, int32 p1, int32 p2)
{
    if(MR_KEY_PRESS == type)
    {

    switch(p1)
    {
        case MR_KEY_SOFTLEFT: //按下左软键
        {

        mr_backstage_st backRunIn; //这个是后台的一个结构体,你有后台接口的话,例子里会有提及的
        int32 ret; 

        //在这里写下backRunIn结构的几个参数值的设定

        g_backrun = mrc_timerCreate();    //为后台运行创建一个timer控件

        max_backNum=20;     //设置后台运行返回时间 s
       backNum=0;     //初始化已经后台运行的时间加值

        ret=//请在本行写上进入后台运行函数,返回值传递给ret

        if (ret==MR_SUCESS)

        { //软件后台成功

            mrc_timerStart(g_backrun, 1000, 0, callAwake, TRUE);

        }else

        { //软件后台失败,不支持后台
            mrc_timerDelete (g_backrun);

        }

    }

    }

}

     

其他代码自行完成,手动返回代码与自动返回类似。

版权声明:小站所有内容均为互联网整理而来,仅供学习参考,如有侵犯您的版权,请联系删除。
本文链接:https://magicblue.cn/lost/15198.html
最后编辑: 23年05月23日

选择表情