• ftk学习记(label篇)


    【 声明:版权全部,欢迎转载,请勿用于商业用途。  联系信箱: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.
    ", __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在释放完一些资源后就结束了。


        这个流程不复杂。还没有搞清楚的朋友能够继续看一下代码。下次,再发布代码的执行效果。




  • 相关阅读:
    简单伪类
    购物网页css
    「WC2020T2」猜数
    ARC 103
    Codeforces 1198F
    ZJOI2019二试游记
    ZJOI2019一试游记
    「WC2015」未来程序
    「CodeForces Round #545 Div2」划水记
    「CF1116」Microsoft Q# Coding Contest
  • 原文地址:https://www.cnblogs.com/yfceshi/p/6917753.html
Copyright © 2020-2023  润新知