zoukankan      html  css  js  c++  java
  • More 平台

    一、More平台架构
            

    二、MFW的组成
          

    三、解析
            1.MObeject重载了new、delete等运算符,使SDK拥有自己的内存分配方式
            2.MScreen 包含有一个MVectorPtr类型的 control_list,这个control_list的用途在于将每一个append进来的窗口都放入到Vector--也就是窗口链当中,方便控制;还有2个MControlPtr类型的变量 active_control与point_active_control,这两个变量的意义在于?
              MScreen 拥有 onKeyPressed()等操作函数,这些函数都是虚函数。之所以采用虚函数是因为后续的MControl中产生的"按键"消息,能够人为的发送至窗口,窗口再进行分发,达到沟通的目的。
              MScreen 还拥有onSysEvent、onSocketEvent、onSmsSendResponse等函数。这些函数各在什么时候被触发:
                      onSysEvent:系统消息,有MM_START 应用启动、 MM_EXIT   应用主动退出、MM_KILL   应用被动退出、MM_SHOW  应用被显示、MM_HIDE   应用被隐藏。当一个窗体收到系统消息,它会轮询control_list里面。然后把消息分发给控件去执行。control_list默认构造函数是10个,在MScreen中为主动释放。但是addElement一次会重新分配一次内存,动态增加。 onSocketEvent、onHttpEvent、onTimer(多了一步判断控件是否可视)都是一样的。窗口(MScreen)不处理onUserEvent、onCntlEvent。
         3.MControl 继承自MScreen,其覆盖的函数有onCntlEvent,这个函数其实仅仅在操作控件所属的窗体上实现功能,我们对窗体进行的点击、按键、列表的选择等操作都会触发这个函数。它通过控件id和msg_id来达到控制的目的。虽然MControl明确把处理提交给父类-MScreen处理,但事实上父类没有进行处理。

        4.onSysEvent、onCntlEvent、onSocketEvent、onHttpEvent等一般作为回调函数,下面为各个函数在何时被触发:
           
           上述为用定义到回调函数的文件名。
           onSysEvent 与 MoreSys 没关系
         
        5.SDK架构
         MoreSdk.c中的函数 _MCRT(void** import_func,void* host_reg,void* app_reg)/*main control real time*/
         调用MoreMain()进行程序的处理,MoreMain调用MoreProc(int msg,void* param)进行处理。MoreProc内部的消息分为:MM_START、MM_SHOW、MM_HIDE、MM_EXIT、MM_KILL、MM_SOC、MM_PAINT、MM_TIME、MM_HTTP、MM_KEY、MM_KEY_RED、MM_PEN、MM_GUI_RES、MM_SMS_SEND、MM_GSENSOR
         一般应用中需要处理的系统事件有:
    MM_START:应用程序启动事件,可以在此事件中做应用程序初始化工作。
    MM_SHOW:应用程序窗口显示事件,这个事件可能在应用启动时和应用程序窗口被其他窗口(如通话窗口)覆盖后重新显示时被触发。
    MM_HIDE: 应用程序窗口隐藏事件,这个事件在应用程序窗口被其他窗口(如通话窗口)覆盖时被触发。
    MM_EXIT:        应用正常退出事件,应用程序调用MoreAppExit退出时触发的事件。可以在此事件中做应用程序所占用资源的释放,文件和网络的句柄的关闭等等处理。
    MM_KILL:        应用被动退出事件,应用程序在某些情况下(如内存不足)被强行关闭时触发的事件。由于应用程序是被动退出,所以除了要处理MM_EXIT事件的处理外,可能对某些应用程序,需要保存当前状态,以便下次启动时恢复。
    MM_PAINT:         该事件在应用程序界面需要重新绘制的时候被调用,可能触发该事件的情况有两种:1.应用程序窗口被显示;2.应用程序调用MoreFlush刷新窗口。
    MM_PEN:         触笔事件,触笔被点下,抬起和点下后移动时触发。
    MM_KEY:         按键事件,按键被按下,抬起时被触发

    More应用程序的编写主要是完成对这些事件的处理。比如需要绘制一张图片到屏幕上,需要调用以下几个API函数
    创建图片对象:在MM_START事件处理中调用CreateMoreImage函数创建图片对象;
    绘制图像:在MM_PAINT事件处理中调用MoreDrawImage函数绘制图像;
    刷新图像:在MM_KEY等事件处理时调用MoreFlushFullScreen刷新图像;
    删除图片对象:在MM_EXIT和MM_KILL事件中调用DelMoreImage删除图片对象。
        
       这个消息是怎么被分发和处理的?我们以简单的MM_START为例:我们通过SDK的工具生成的项目模板,其实是MApp.cpp(为什么是cpp?)的一个定制文件。其入口函数是MoreMain().入口函数中通过调用MoreSys.c中的MoreAppInit方法,使用的是回调的方式,去处理其执行函数。
       我们需要认识一下回调的本质?
            回调函数的本质是什么,是一个功能块,这个功能块的执行取决于一点:调用者环境的设定。回调函数通过传输地址信息给调用者,调用者设定最终调用的条件。

            
  • 相关阅读:
    自古逢秋悲寂寥,奈何今秋热成雕?Python使用Pyecharts统计全国温度Top10并绘图
    Python爬虫帮你打包下载所有抖音好听的背景音乐,还不快收藏一起听歌
    补习系列(1)-springboot项目基础搭建课
    华为云OCR文字识别 免费在线体验!
    Python开发还在用virtualenv?不如了解下pipenv...#华为云·寻找黑马程序员#
    大型情感剧集Selenium:6_selenium中的免密登陆与cookie操作
    八分音符(频率)卷积算子 Octave Convolution
    补习系列-springboot-使用assembly进行项目打包
    Vue中拆分视图层代码的5点建议
    线上一个数组查询遇到的坑
  • 原文地址:https://www.cnblogs.com/xianqingzh/p/1722166.html
Copyright © 2011-2022 走看看