ftk學習記(list篇)

2021-06-22 05:07:46 字數 3045 閱讀 5453

在開始今天的list主題之前,先看一下icon的執行效果。

今天說的list其實和這個icon差不多。大家只需要把這些icon想像成一條一條的item就可以了。同樣,list的demo**中也會有乙個more的button,每次單擊一下,就會增加幾個item。閒話不多說,先看一下demo**是怎麼樣的。

#include "ftk.h"

#include "ftk_list_view.h"

#include "ftk_list_render_default.h"

#include "ftk_list_model_default.h"

#define idc_test_button 1000

int g_index = 0;

ftkbitmap* left_icon = null;

ftkbitmap* right_icon = null;

static ret button_quit_clicked(void* ctx, void* obj)

static ret button_more_clicked(void* ctx, void* obj)

; ftklistiteminfo info = ;

ftklistmodel* model = ctx;

for(i = 0; i < 4; i++)

return ret_ok;

}ret on_item_clicked(void* ctx, void* list)

ftk_logd("%s: %d/%d\n", __func__,

ftk_list_view_get_selected(list),

ftk_list_model_get_total(model));

return ret_ok;

}int ftk_main(int argc, char* argv)

; ftkwidget* win = null;

ftkwidget* button = null;

ftkwidget* list = null;

ftklistmodel* model = null;

ftklistrender* render = null;

ftklistiteminfo info = ;

char filename[ftk_max_path+1] = ;

ftk_init(argc, argv);

width = ftk_widget_width(win);

height = ftk_widget_height(win);

list = ftk_list_view_create(win, 10, 5, width - 20, 3 * height/4-5);

ftk_list_view_set_clicked_listener(list, on_item_clicked, null);

model = ftk_list_model_default_create(10);

render = ftk_list_render_default_create();

ftk_snprintf(filename, ftk_max_path, "%s/alarm/%s",testdata_dir, ftk_stock_img_suffix);

left_icon = ftk_bitmap_factory_load(ftk_default_bitmap_factory(), filename);

ftk_snprintf(filename, ftk_max_path, "%s/search/%s", testdata_dir, ftk_stock_img_suffix);

right_icon = ftk_bitmap_factory_load(ftk_default_bitmap_factory(), filename);

g_index = 0;

for(g_index = 0; g_index < 4; g_index++)

ftk_list_view_init(list, model, render, 40);

ftk_list_model_unref(model);

button = ftk_button_create(win, width/4, 3 * height/4 + 5, width/4, 60);

ftk_widget_set_text(button, "more");

ftk_button_set_clicked_listener(button, button_more_clicked, model);

button = ftk_button_create(win, width/2, 3 * height/4 + 5, width/4, 60);

ftk_widget_set_text(button, "quit");

ftk_button_set_clicked_listener(button, button_quit_clicked, win);

ftk_window_set_focus(win, button);

ftk_widget_set_text(win, "list view demo");

ftk_widget_show_all(win, 1);

ftk_widget_set_attr(win, ftk_attr_quit_when_close);

ftk_run();

return 0;

}

細細看來,**的流程非常眼熟。大家可以把注意力集中到list、model、render和info這幾個變數上。其中,尤其需要注意的是list和info。list提供了乙個顯示空間,而info則用來表示每乙個list的item。當然,每乙個list item被選中的時候,on_item_clicked函式都會被呼叫。當然,除此之外系統也建立了兩個button,兩個callback函式分別是button_quit_clicked和button_more_clicked。具體的細節分析一下**即可。

好了,說了這麼多,還是等著看下次的執行效果吧。

ftk學習記(label篇)

還是接著上面的一篇博文。之前曾經答應過大家,讓大家看一下最簡單的ftk程式是怎麼執行的。所以,這裡我們上傳一下。label,顧名思義,就是乙個標籤。更直白一點,就是在視窗上某個地點顯示一串文字。當然,你可以根據自己的需要靈活修改文字的型別 大小 顏色 背景等資訊,總之就是這麼個意思。閒話少說,我們可...

ftk學習記(icon篇)

在開始今天的文章之前,我們還是先看一下上一節的效果圖。大家可以參照上一節的講解,是不是存在這樣的button,是不是存在這樣的wait box控制項,同樣是不是可以看到wait box活動的情形。當然,有條件的朋友最好自己編譯一下這個demo 按步驟除錯每一行 今天,如標題所示,我們所學習的是ico...

ftk學習記(label篇)

還是接著上面的一篇博文。由於還是編輯模式。所以臨時還不能看到在網頁中是怎麼顯示的。include ftk.h typedef struct timerinfo timerinfo static ret timeout void ctx if info times 0 else int main in...