首页 > 其他分享 >ftk学习记(label篇)

ftk学习记(label篇)

时间:2022-11-23 12:01:53浏览次数:36  
标签:info widget set win label 学习 ftk


    还是接着上面的一篇博文。之前曾经答应过大家,让大家看一下最简单的ftk程序是怎么运行的。所以,这里我们上传一下图片。

ftk学习记(label篇)_控件


    因为还是编辑模式,所以暂时还不能看到图片在网页中是怎么显示的。不过没有关系,这次只是做一个最初的尝试。如果大家有更好的意见,不妨用微信扫一下头像或者私信给我,就可以了。


    前面的代码还是比较简单的。今天,我们来学习一下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在释放完一些资源后就结束了。


    这个流程不复杂。还没有搞清楚的朋友可以继续看一下代码。下次,再公布代码的运行效果。




标签:info,widget,set,win,label,学习,ftk
From: https://blog.51cto.com/feixiaoxing/5880827

相关文章

  • MarkDown学习
    Markdown学习标题一级标题#+标题名二级标题##+标题名三级标题###+标题名字体正常字体Hello,World!Hello,World!文字两边加双星号为加粗字体Hello,World!......
  • unity学习笔记03-渲染管线
    图形数据在GPU上经过运算处理,最后显示在显示器上的过程游戏→图形API→cpu→(DRAWCALL)交给GPU→顶点处理→图元装配→光栅化→像素处理→缓存减少DRAWCALL 增加性能O......
  • 本人学习整理了-美妆类目完整直播话术框架流程➕话术提纲➕话术美妆类目完整直播话术
    本人当主播2年和运营1年,自己练习和整理的笔记分享详情内容,包括开场话术、活动话术、产品话术、品牌介绍、建立信任、优惠力度理由、促销、憋单技巧话术、互动话术、转款话......
  • 随想录(机器学习的生产应用)
    【声明:版权所有,欢迎转载,请勿用于商业用途。     从范围上讲,人工智能>机器学习>模式识别。最近机器学习愈演愈烈,特别是深度学习的发展,极大的推动了机器学习的应......
  • Python 深度学习目标检测评价指标
    ✅作者简介:热爱科研的算法开发者,Python、Matlab项目可交流、沟通、学习。......
  • Prometheus AlertManager 生产实践-直接根据 to_email label 发 alert 到对应邮箱
    概述通过之前的文章-PrometheusAlertmanager生产配置趟过的坑总结,我们已经知道AlertManager作为告警平台,是非常强大的,可以去重(deduplicating),分组(grouping),并......
  • 技术博客学习
    https://www.cnblogs.com/yangzhou33/archive/2020/11.htmlhttps://yuancheng.work/vue插槽学习https://blog.csdn.net/weixin_41646716/article/details/80450873......
  • Vue3学习笔记(七)—— 状态管理、Vuex、Pinia
    一、状态管理1.1、什么是状态管理?理论上来说,每一个Vue组件实例都已经在“管理”它自己的响应式状态了。我们以一个简单的计数器组件为例:<scriptsetup>import{re......
  • 学习量子力学
    向xxx学习,我也决定开始写学习日记,也许可以提高效率!学习资料:Griffith:IntroductiontoQuantumMechanicsSakurai:ModernQuantumMechanicsProf.BartonZwiebach's......
  • CAD命令学习日志
    CAD命令学习日志配置OP-打开配置选项UNITS-设置全局默认单位查找QSELECT-快速选择相同对象LIST-快速查看对象信息FILTER-对象过滤器F2-打开CAD文本窗......