【 聲明:版權全部,歡迎轉載,請勿用于商業用途。 ?聯系信箱:feixiaoxing @163.com】
? ? 還是接著上面的一篇博文。
之前以前答應過大家,讓大家看一下最簡單的ftk程序是怎么執行的。所以,這里我們上傳一下圖片。
? ? 由于還是編輯模式。所以臨時還不能看到圖片在網頁中是怎么顯示的。
只是沒有關系,這次僅僅是做一個最初的嘗試。假設大家有更好的意見,最好還是用微信掃一下頭像或者私信給我,就能夠了。
? ? 前面的代碼還是比較簡單的。今天,我們來學習一下label的顯示方法。當然,無論大家是做windows phone、android app、ios,怎樣編寫gui都是一個基本功課。這些gui顯示的方法大同小異。假設有心學習一下ftk。其它的移動app相信也不在話下。只是,由于移動應用開發的語言不太一樣,有c sharp。 有java,有object c。所以差異性多少還是有點的。
? ? label,顧名思義,就是一個標簽。更直白一點,就是在窗體上某個地點顯示一串文字。當然。你能夠依據自己的須要靈活改動文字的類型、大小、顏色、背景等信息。總之就是這么個意思。閑話少說,我們能夠看看demo下label代碼是怎么編寫的。相同,今天僅僅會展示代碼的內容,詳細顯示的效果還要等待以下一篇文章。
#include "ftk.h"typedef struct _TimerInfo
{int times;FtkWidget* label;
}TimerInfo;static Ret timeout(void* ctx)
{TimerInfo* info = ctx;char buffer[32] = {0};if(info->times > 0){snprintf(buffer, sizeof(buffer), "Quit after %d seconds", info->times);ftk_widget_set_text(info->label, buffer);info->times--;return RET_OK;}else{ftk_quit();ftk_logd("%s: timeout and quit.\n", __func__);return RET_REMOVE;}
}int main(int argc, char* argv[])
{int width = 0;int height = 0;FtkGc gc = {.mask = FTK_GC_BG};TimerInfo info = {.times=5, };ftk_init(argc, argv);FtkSource* timer = ftk_source_timer_create(1000, timeout, &info);FtkWidget* win = ftk_app_window_create();width = ftk_widget_width(win);height = ftk_widget_height(win);FtkWidget* label = ftk_label_create(win, 10, 10, width - 20, 20);ftk_widget_set_text(label, "中文文本");label = ftk_label_create(win, 10, 40, width - 20, 20);ftk_widget_set_text(label, "English Text");assert(strcmp(ftk_widget_get_text(label), "English Text") == 0);gc.bg.a = 0xff;gc.bg.r = 0xF0;gc.bg.g = 0xF0;gc.bg.b = 0x80;label = ftk_label_create(win, 10, height/2, width - 20, 120);ftk_widget_set_gc(label, FTK_WIDGET_INSENSITIVE, &gc);ftk_widget_unset_attr(label, FTK_ATTR_TRANSPARENT);ftk_widget_set_text(label, "中英文混合多行文本顯示:the linux mobile development.帶有背景顏色。");label = ftk_label_create(win, 50, height/2-30, width, 20);info.label = label;ftk_widget_set_text(win, "label demo");ftk_widget_show_all(win, 1);ftk_widget_set_attr(win, FTK_ATTR_IGNORE_CLOSE);ftk_main_loop_add_source(ftk_default_main_loop(), timer);ftk_run();return 0;
}
? 代碼的內容,不是非常多,大約有個70行左右。
開始,相同首先初始化ftk,調用了ftk_init函數。在函數結尾的地方,代碼也調用了ftk_run函數。
這些都是代碼的基本流程。僅僅要你是用的是ftk。都須要遵守這個流程。中間的內容都是自己加入的。
?
??? 繼續分析,我們觀察一下,代碼都做了些什么。細細想來,事實上邏輯都差點兒相同。依次往下看,代碼創建了一個win控件,進而在win上插入了4個label控件。它們各自是中文文本、English Text、中英文混合多行文本顯示、暫時label。
除此之外,代碼中還出現了一個timer,每隔一段時間,它都會調用timeout這個函數。這個函數做了什么啊,從10行開始往下看。事實上就是定時顯示一段文字。告訴我們窗體離quit還有幾秒。假設超時了呢,當然就會調用ftk_quit這個函數,ftk在釋放完一些資源后就結束了。
? ? 這個流程不復雜。還沒有搞清楚的朋友能夠繼續看一下代碼。下次,再發布代碼的執行效果。