7. 主功能函数以上所有准备工作都已完成,接下来就是具体的实现了。上一步中设定了按菜单左键后系统将调用EntryHelloWorld,那么,以下我们的任务将是如何将功能写在该函数中。
我们将文本显示函数加入到函数EntryHelloWorld中去:
void EntryHelloWorld(void)
{
gui_print_text((UI_string_type)GetString(STR_ID_HELLO_WORLD));
}
gui_print_text函数用来输出字符串,GetString用来获取STR_ID_HELLO所对应的字符串。另外,使用gui_print_text(L“Hello,World”);也可以输出字串“Hello,World”。因为我们的平台是基于多国语言的,所以一般情况与文本相关的函数都只接受Unicode编码,在这里使用L“Hello,World”可将字串强制转换为Unicode编码。
我们的期望是在当前屏幕下按左软键进入一个新的屏幕,这样,我们还得加其它函数:
void EntryHelloWorld(void)
{
EntryNewScreen(SCR_ID_HELLO_WORLD, NULL,EntryHelloWorld,NULL);
entry_full_screen();
clear_screen();
gui_move_text_cursor(60,150);
gui_set_text_color(UI_COLOR_RED);
gui_print_text((UI_string_type)GetString(STR_ID_HELLO_WORLD));
gui_BLT_double_buffer(0,0,UI_device_width- 1, UI_device_height - 1);
}
EntryNewScreen函数中第一个参数为屏幕的ID,这个是我们之前已经定义好的,第二个参数为屏幕的退出函数,系统在强制退出屏幕时自动调用此函数,这个函数主要是做一些资源释放等方面的工作,如果没有的可以设为空。第三个参数为屏幕的入口函数。第四个参数暂时不用。
entry_full_screen()是进入全屏,在大的屏幕中,系统默认显示状态信息条,如果不强制关闭状态条,系统会将其显示出来。
clear_screen()可以将整个屏幕刷成白色;gui_set_text_color()则用来设置文本字体的颜色;gui_move_text_cursor()用来设置文本显示的位置;gui_BLT_double_buffer()用来刷新整个屏幕,如果不强制刷新是看不到效果的。另外,每次输出文本前都应该重设文本属性。
现在,我们来看一下添加的效果,在前面的几个步骤完成后,Organizer菜单下应该多一条我们自己加的菜单项Hello,World,如下图:
这里的图标是是借用的其它菜单的图标。现在,我们通过按左软键OK来看看效果:
8.手动加入屏幕历史在上一节已经讲过,在调用EntryNewScreen()函数时传入屏幕ID和屏幕的入口函数,系统会在下次调用EntryNewScreen(即进入下一个更新屏幕)时自动将当前屏幕加入到历史记录中,当新的屏幕退出后,系统会将屏幕从历史中弹出并显示出来。另外,我们还可以手动加入历史。
当EntryNewScreen函数的第三个参数为空时,系统将不会自动加入历史,这时我们可以定义一个退出函数:
void ExitHelloWorld(void)
{
historycurrHistory;
S16nHistory = 0;
currHistory.scrnID= SCR_ID_HELLO_WORLD;
currHistory.entryFuncPtr= EntryHelloWorld;
pfnUnicodeStrcpy((S8*)currHistory.inputBuffer, (S8 *)&nHistory);
AddHistory(currHistory);
}
这样,我们将该函数地址传给EntryNewScreen,供系统调用:
void EntryHelloWorld(void)
{
EntryNewScreen(SCR_ID_HELLO_WORLD, ExitHelloWorld,NULL, NULL);
entry_full_screen();
clear_screen();
gui_move_text_cursor(60,150);
gui_set_text_color(UI_COLOR_RED);
gui_print_text((UI_string_type)GetString(STR_ID_HELLO_WORLD));
gui_BLT_double_buffer(0,0,UI_device_width- 1, UI_device_height - 1);
}
通常我们的平台都是按右键退出屏幕,我们将其功能加入代码中:
void EntryHelloWorld(void)
{
EntryNewScreen(SCR_ID_HELLO_WORLD, ExitHelloWorld,NULL, NULL);
entry_full_screen();
clear_screen();
gui_move_text_cursor(60,150);
gui_set_text_color(UI_COLOR_RED);
gui_print_text((UI_string_type)GetString(STR_ID_HELLO_WORLD));
gui_BLT_double_buffer(0,0,UI_device_width- 1, UI_device_height - 1);
SetKeyHandler(GoBackHistory,KEY_RSK, KEY_EVENT_UP);
}
这样,一个简单的MMI程序基本出来了。 |