首页 > 其他分享 >MTK界面说明

MTK界面说明

时间:2022-12-14 15:15:43浏览次数:36  
标签:界面 text gui 说明 MTK UI 刷新 屏幕 void

@

目录

简介

MMI界面说明

基础

在界面上打印 Hello World

下面是我们要实现的效果,在手机上面实现打印 Hello World:

img

程序入口

借用现有的程序入口 goto_main_menu,这个是主菜单的入口函数(在MainMenu.c中),在Idle时按左软件就会进入主菜单。
我们要借用的代码如下:

void mmi_myapp_entry(void)
{
    //我们的程序由此开始
}
void goto_main_menu(void)
{
    // 将主菜单切换成我们的程序
    mmi_myapp_entry();
    return;
}

打印文本

入口函数写好了,接下来我们使用显示文本串函数
void UI_print_text(UI_string_type text);
这个函数跟DOS中的printf使用方式差不多

extern void UI_print_text(UI_string_type text); 
#define gui_print_text UI_print_text

void mmi_myapp_entry(void)
{
    //我们的程序由此开始

    //因为我们平台默认是多国语言的,所以基本上文本相关的函数都只接受Uinicode编码
    //所以这里使用强制转换成Uinicode编码输入
    gui_print_text(L"Hello World");
}

img

可是如图中所示,我们看不到任何效果!
为什么会这样?这是因为我们平台里面,当所有绘画动作代码结束时,如果不强制刷新屏幕是看不到效果的。

刷新屏幕

函数 gui_BLT_double_buffer 用来刷新屏幕:

void mmi_myapp_entry(void)
{
    //我们的程序由此开始

    //因为我们平台默认是多国语言的,所以基本上文本相关的函数都只接受Uinicode编码
    //所以这里使用强制转换成Uinicode编码输入
    gui_print_text(L"Hello World");
    // 刷新屏幕  四个参数指明了刷新的范围 一般默认为刷新整个屏幕
    gui_BLT_double_buffer(0, 0, UI_device_width - 1, UI_device_height - 1);
}

img

"Hello World"在屏幕的左下角,当然,这样的效果还不能让人满意。

清屏

此时需要将背景去掉

void mmi_myapp_entry(void)
{
    //我们的程序由此开始

    //将整个屏幕刷成白色的
    clear_screen();
    //因为我们平台默认是多国语言的,所以基本上文本相关的函数都只接受Uinicode编码
    //所以这里使用强制转换成Uinicode编码输入
    gui_print_text(L"Hello World");
    // 刷新屏幕  四个参数指明了刷新的范围 一般默认为刷新整个屏幕
    gui_BLT_double_buffer(0, 0, UI_device_width - 1, UI_device_height - 1);

}

img

这样一来就好看多了

文本属性

函数 gui_move_text_cursor 用来设置文本输出的起始位置,
函数 gui_set_text_color 用来修改文本颜色

void mmi_myapp_entry(void)
{
    //我们的程序由此开始

    //将整个屏幕刷成白色的
    clear_screen();
    //修改显示位置
    gui_move_text_cursor(30, 69);
    //设置文本红色
    gui_set_text_color(UI_COLOR_RED);
    //因为我们平台默认是多国语言的,所以基本上文本相关的函数都只接受Uinicode编码
    //所以这里使用强制转换成Uinicode编码输入
    gui_print_text(L"Hello World");
    // 刷新屏幕  四个参数指明了刷新的范围 一般默认为刷新整个屏幕
    gui_BLT_double_buffer(0, 0, UI_device_width - 1, UI_device_height - 1);

}

img

因为文本属性设置时针对整个系统的,并且不会有默认值,所以在每次设置文本的时候都要设置文本属性。

总结
至此,完成一个简单的mmi界面功能。

屏幕

新的屏幕

上一章的屏幕输出后,我们只要稍微等上一会,就会发现屏幕上多出一些不想要的东西。

img

是因为Idle中的东西出现在这里,因为当我们进入一个新的程序的时候,如果上一个程序没有手动退出,那么上一个程序一直都是存活的,
而这些多出来的东西就是因为我们没有强制退出Idle。

void mmi_myapp_entry(void)
{
    //我们的程序由此开始
    //退出上一个程序,进入新程序
    EntryNewScreen(MAIN_MENU_SCREENID, NULL, NULL, NULL);
    entry_full_screen();
    //将整个屏幕刷成白色的
    clear_screen();
    //修改显示位置
    gui_move_text_cursor(30, 69);
    //设置文本红色
    gui_set_text_color(UI_COLOR_RED);
    //因为我们平台默认是多国语言的,所以基本上文本相关的函数都只接受Uinicode编码
    //所以这里使用强制转换成Uinicode编码输入
    gui_print_text(L"Hello World");
    // 刷新屏幕  四个参数指明了刷新的范围 一般默认为刷新整个屏幕
    gui_BLT_double_buffer(0, 0, UI_device_width - 1, UI_device_height - 1);

}

屏幕历史

在我们的系统中建立了一套屏幕历史管理机制,只要在调用EntryNewScreen时传入我们新进入屏幕的ID及屏幕的入口函数,系统就会在下次调用
EntryNewScreen时,自动将我们的屏幕加入到历史记录中,当新的屏幕退出后,系统也会将我们的屏幕从历史中弹出并显示出来。

U8 EntryNewScreen(U16 newscrnID, FuncPtr newExitHandler, FuncPtr newEntryHandler, void *flag);
第一个参数:新显示屏幕的序号,每个屏幕都有一个全局唯一的序号,这样方便系统管理
第二个参数:屏幕的退出函数,系统在强制退出我们的屏幕时会自动调用此函数,我们可以在其中做一些资源释放等方面的工作,没有则设置为NULL
第三个参数:屏幕的入口函数,只有传入此参数,系统才会将屏幕自动加入历史。
第四个参数:暂不使用

void mmi_myapp_entry(void)
{
    //我们的程序由此开始
    //退出上一个程序,进入新程序
    EntryNewScreen(MAIN_MENU_SCREENID, NULL, mmi_myapp_entry, NULL);
    entry_full_screen();
    //将整个屏幕刷成白色的
    clear_screen();
    //修改显示位置
    gui_move_text_cursor(30, 69);
    //设置文本红色
    gui_set_text_color(UI_COLOR_RED);
    //因为我们平台默认是多国语言的,所以基本上文本相关的函数都只接受Uinicode编码
    //所以这里使用强制转换成Uinicode编码输入
    gui_print_text(L"Hello World");
    // 刷新屏幕  四个参数指明了刷新的范围 一般默认为刷新整个屏幕
    gui_BLT_double_buffer(0, 0, UI_device_width - 1, UI_device_height - 1);

}

我们的屏幕是独占整个显示系统及交互系统的,也就是说我们的系统在任何时候只能由一个屏幕来控制。

返回最近的屏幕

有进入就有退出,退出屏幕也需要手动执行,我们通常用GoBackHistory通知系统将历史中最后一次显示的屏幕弹出来


void mmi_myapp_entry(void)
{
    //我们的程序由此开始
    //退出上一个程序,进入新程序
    EntryNewScreen(MAIN_MENU_SCREENID, NULL, mmi_myapp_entry, NULL);
    entry_full_screen();
    //将整个屏幕刷成白色的
    clear_screen();
    //修改显示位置
    gui_move_text_cursor(30, 69);
    //设置文本红色
    gui_set_text_color(UI_COLOR_RED);
    //因为我们平台默认是多国语言的,所以基本上文本相关的函数都只接受Uinicode编码
    //所以这里使用强制转换成Uinicode编码输入
    gui_print_text(L"Hello World");
    //刷新屏幕  四个参数指明了刷新的范围 一般默认为刷新整个屏幕
    gui_BLT_double_buffer(0, 0, UI_device_width - 1, UI_device_height - 1);
    // 返回历史记录中最近的一个
    SetKeyHandler(GoBackHistory, KEY_RSK, KEY_EVENT_UP);
}

我们通常将右软件设为返回最近显示的屏幕。
总结
至此,一个可观看可操作的简单MMI程序已经出来了,接下来将程序标准化,规范化。

标签:界面,text,gui,说明,MTK,UI,刷新,屏幕,void
From: https://www.cnblogs.com/Wei-Ting/p/16982204.html

相关文章

  • vue serve 部署 步骤说明
    1.构建镜像dockerbuild-t镜像名称:镜像TAG--build-argURL=http://localhost:8081--build-argPORT=2000--build-argSSL_PORT=443-fDockerfile.如果......
  • ENVI 5.6.2 及以上版本默认显示插值方法说明
    在ENVI5.6.2版本新特性中有一项是:ChangedtheZoomInterpolationMethoddefaultpreferenceOptimizedBicubic更改了“缩放插值方法”默认选项为“优化双三次”......
  • 图文并茂说明raid0,raid1, raid10, raid01, raid5等原理。
    RAID0  不具有防止数据丢失的功能,主要是能够并行存储,数据存储方式如下图:  RAID1  具有数据冗余的能力,能够一定保证其中一块硬盘坏掉,数据不会丢失,如果两块......
  • 超全!Python图形界面框架PyQt5使用指南!
    使用Python开发图形界面的软件其实并不多,相对于GUI界面,可能Web方式的应用更受人欢迎。但对于像我一样对其他编程语言比如C#或WPF并不熟悉的人来说,未必不是一个好的工具。......
  • 【AGC】云调试界面空白问题
    ​关于打开华为AGC-云调试界面空白的问题。问题背景:一个CP反馈在使用AGC平台的华为AGC-云调试服务时,打开界面发现出现空白的现象,经过清除浏览器缓存和更换浏览器重试都......
  • 界面组件 Kendo UI for Angular—— 让应用数据显示更直观!(二)
    KendoUI致力于新的开发,来满足不断变化的需求,通过React框架的KendoUIJavaScript封装来支持ReactJavascript框架。KendoUIforAngular是专用于Angular开发的专业级Angu......
  • VCL界面组件DevExpress VCL v22.1 - 支持新的格式标签和矢量图标
    DevExpressVCL是Devexpress公司旗下最老牌的用户界面套包,所包含的控件有:数据录入、图表、数据分析、导航、布局等。该控件能帮助您创建优异的用户体验,提供高影响力的业务......
  • Spring Cloud版本说明和Spring Boot版本选择
    SpringCloud是一个由众多独立子项目组成的大型综合项目,每个子项目有不同的发行节奏,都维护着自己的发布版本号。 SpringCloud通过一个资源清单(BillofMaterial,BOM)来管......
  • package 版本号说明
    在package.json文件中经常会见到类似^0.1.0,~0.1.0,0.1.0和>=之类的限定符的版本号。 版本号的格式:X.Y.Z,分别代表主版本号、次版本号及补丁版本号;含义: X:向下不兼容,大......
  • Basler相机C语言接口说明
    由于公司项目需要,使用了Basler相机。所以特写此文记录如何使用Basler相机进行采图。公司项目用的代码是不能贴出来的,所以在这篇文章里就不贴代码了,只做流程上的说明。本文......