ftk学习记(多窗口篇)


【声明:版权所有,欢迎转载,请勿用于商业用途。  联系信箱:feixiaoxing @163.com】


    在上周末的博客中,我们谈到了list view,今天可以看看效果图如何。


ftk学习记(多窗口篇)_第1张图片


    如果大家细心一点,可以发现list中的item有点差异,有兴趣的朋友可以思考一下原因是什么,其实可以代码中看出来的。今天,我们聊的是多窗口的问题。大多数app,很少是一个窗口上完成所有的功能的。闲话不多说,先看代码。


#include "ftk.h"

static void create_app_window(void);
static Ret button_open_clicked(void* ctx, void* obj)
{
	create_app_window();

	return RET_OK;
}

static Ret button_close_clicked(void* ctx, void* obj)
{
	FtkWidget* win = ctx;
	ftk_logd("%s: close window %s\n", __func__, ftk_widget_get_text(win));
	ftk_widget_unref(win);

	return RET_OK;
}

static int g_index = 0;
static void on_window_close(void* user_data)
{
	g_index--;

	ftk_logd("%s: g_index=%d\n", __func__, g_index);
	if(g_index == 0)
	{
		ftk_quit();
	}

	return ;
}


static void create_app_window(void)
{
	char title[32] = {0};
	int width = 0;
	int height = 0;
	FtkWidget* win = ftk_app_window_create();
	FtkWidget* label = NULL;
	FtkWidget* button = NULL;
	
	width = ftk_widget_width(win);
	height = ftk_widget_height(win);

	button = ftk_button_create(win, 0, height/6, width/3, 50);
	ftk_widget_set_text(button, "创建窗口");
	ftk_button_set_clicked_listener(button, button_open_clicked, win);

	button = ftk_button_create(win, 2*width/3, height/6, width/3, 50);
	ftk_widget_set_text(button, "关闭窗口");
	ftk_button_set_clicked_listener(button, button_close_clicked, win);

	snprintf(title, sizeof(title), "window%02d", g_index++);
	label = ftk_label_create(win, width/4, height/2, width/2, 30);
	ftk_widget_set_text(label, title);
	
	ftk_widget_set_text(win, title);
	ftk_widget_show_all(win, 1);
	ftk_widget_set_user_data(win, on_window_close, win);

	return;
}

int main(int argc, char* argv[])
{
	ftk_init(argc, argv);
	
	create_app_window();

	ftk_run();

	return 0;
}

    从代码中,大家可以发现出现了流程中出现了一个create_app_window这个函数。这个函数不仅出现在系统初始的流程中,而且出现在button_open_clicked这个函数中。这说明系统在初始运行的时候,就会创建一个窗口,而且以后每次单击“创建窗口”按钮的时候,也会在当前的窗口之上增加一个窗口。当然如果想关闭当前窗口,直接单击“关闭窗口”这个按钮就可以了。


    闲话不多说,下次上效果图。




你可能感兴趣的:(ftk学习记(多窗口篇))