Posted on 2009-12-19 10:55
~William~ 閱讀(547)
評論(0) 編輯 收藏 引用 所屬分類:
MTK_MMI
MMI一些總結
1 繪制字符串
聲明頭文件“gui.h”
設定字體:
Void (*pixtel_UI_set_font)(UI_font_type f)=NULL;
參數f 為需要使用的字體,可以使用系統已經有的字體如:MMI_sublcd_font. 也可以自己定義字體。使用 stFontAttribute xxxx 定義自己需要的字體。
在 解密MTK文檔\MMI\176X220GPRS.pdf中有關于中文字體的一些定義
設定文本顯示位置:
Void (*pixtel_UI_move_text_cursor)(s32 x,s32 y)=NULL;
參數 x,y為將要顯示字符串的左上角坐標。
設定文本顏色:
Void (*pixtel_UI_set_text_color)(color c)=NULL;
color 為一個結構體。用于定義RGB顏色和alpha通道
typedef struct _color
{
byte r;
byte g;
byte b;
byte alpha;
}color;
打印文本:
Void (*pixtel_UI_print_text)(UI_string_type_text) = NULL;
需要注意的是字符串前面都需要加L。
2 圖片繪制
如何制作透明背景圖片:
1 首先利用Photoshop設計一個bmp格式圖片
2 [圖像]?[模式]將其顏色改變為索引色
3 [圖像]?[模式]打開該圖片的顏色表。將第一格的顏色值改為該圖片上沒有用到過的其他顏色。然后確定保存。
4 將該圖片導入MTK工程后,該圖片覆蓋在其他圖片上時,背景透明。
MTK不支持PNG圖片,位于Images目錄下的資源文件不支持jpeg,同樣不支持PNG。
圖片繪制:
Void (*pixtel_UI_show_transparent_image)(s32 x,s32 y,UI_image_type I,UI_transparent_color_type t)=NULL;
該函數以x,y為坐標繪制圖片,同時指定顏色t為透明色,即t顏色不顯示,當作透明。
例如在原點位置顯示ID為IMG_GLOBAL_TEST的圖片。
pixtel_UI_show_transparent_image(0, 0, get_image(IMG_GLOBAL_TEST), pixtel_UI_transparent_color(255,255,203));
接著,需要設定緩沖區用于圖片顯示在屏幕上,這是必不可少的。
pixtel_UI_BLT_double_buffer(0,0,UI_device_width-1, UI_device_height-1);
關于圖片繪制還有很多種方法,
詳細見 解密MTK文檔\MMI Design Doc\Pixtel_UI_Programmers_Manual.pdf
3關于觸摸屏
1 編寫觸摸筆按下時的句柄函數,包含用戶所需要的一些響應。例如我們讓觸摸筆按下時候,將變量touch_pressed設置為TRUE,同時,pos紀錄了觸摸筆落在屏幕上面的坐標。
void mmi_pen_down_hdlr(mmi_pen_point_struct pos)
{
touch_pressed = TRUE;
}
2 調用系統函數 mmi_wgui_register_pen_down_handler(mmi_pen_hdlr pen_down_hdlr)
注冊前面的觸摸筆按下的句柄函數:
mmi_wgui_register_pen_down_handler(mmi_pen_down_hdlr)
然后,觸摸筆就可以生效。當我們點下觸摸筆時候,touch_pressed為真。
3 對于觸摸筆釋放也是一樣的道理,也需要設置釋放的函數mmi_pen_up_hdlr,然后調用
mmi_wgui_register_pen_up_handler(mmi_pen_up_hdlr)注冊前面的釋放函數。
在這兩個系統函數中的參數中,mmi_pen_hdlr為函數指針。利用函數指針可以實現一個通用的函數來實現各種專用的功能。
typedef void (*mmi_pen_hdlr)(mmi_pen_point_struct pos);
4 關于按鍵
類似于觸摸筆操作,首先編寫一個按鍵函數,里面實現用戶所期望的功能。例如
Void key_2_press(void)
{
2號鍵按下標志=TRUE;
}
然后調用系統函數
SetKeyHandler(key_2_press,KEY_2,KEY_EVENT_DOWN);注冊該函數,并將2號鍵,事件類型與該函數綁定。
作了上面工作,2號鍵就能夠在MTK里起作用。
5 關于CategoryScreen()
在MTK中有各種類型的屏幕顯示。它們彼此的結構一樣,區別就在于之間的標題,按鍵,以及屏幕上面的一些控件是否相同。
ShowCategoryXScreen(Argument list)
經常用到的這個函數,由應用程序調用。參數列表里面指明了該屏幕中左軟鍵和右軟鍵,標題顯示等等。還可以指明一些特殊的元素如文本輸入框,列表項。
以下面的函數為例:
void ShowCategory221Screen( U16 title,
U16 title_icon,
U16 left_softkey,
U16 left_softkey_icon,
U16 right_softkey,
U16 right_softkey_icon,
gdi_color background_color,
FuncPtr redraw_content_callback )
title 用于指明該屏幕上的標題欄的名稱。
title_icon 該標題欄所用到的圖標
left_softkey 左軟鍵的字符串ID
left_softkey_icon 左軟鍵的圖標ID
right_softkey右軟鍵的字符串ID
right_softkey_icon 右軟鍵的圖標ID
background_color 背景顏色
redraw_content_callback 用于重畫的回調函數指針,一般在主題更新時候由框架調用,一般設置為0
6 關于timer和循環
在MTK中也可以實現類似于J2ME中的循環。
首先編寫一個函數,用于規定的延遲時間到期時候的調用。例如
Cyclic_timer();
然后調用函數 pixtel_UI_start_timer(500,cyclic_timer);
需要注意的是,我們需要將pixtel_UI_start_timer(500,cyclic_timer);寫入到cyclic_timer()中,這樣,每當500毫秒到期時候,函數將調用自身,再次進入到該函數,從而實現循環,我們在里面可以添加條件判斷,來實現跳出循環等工作。
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/chenzhp/archive/2009/03/14/3990504.aspx