ftk学习记(label篇)【转】

简介: 转自:http://blog.csdn.net/feixiaoxing/article/details/25000093 版权声明:本文为博主原创文章,未经博主允许不得转载。 【 声明:版权所有,欢迎转载,请勿用于商业用途。

转自:http://blog.csdn.net/feixiaoxing/article/details/25000093

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

 

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


 

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

 

    前面的代码还是比较简单的。今天,我们来学习一下label的显示方法。当然,不管大家是做windows phone、Android app、iOS,如何编写gui都是一个基本功课。这些gui显示的方法大同小异。如果有心学习一下ftk,其他的移动app相信也不在话下。不过,因为移动应用开发的语言不太一样,有c sharp, 有Java,有object c,所以差异性多少还是有点的。

 

    label,顾名思义,就是一个标签。更直白一点,就是在窗口上某个地点显示一串文字。当然,你可以根据自己的需要灵活修改文字的类型、大小、颜色、背景等信息,总之就是这么个意思。闲话少说,我们可以看看demo下label代码是怎么编写的。同样,今天只会展示代码的内容,具体显示的效果还要等待下面一篇文章。

 

  1. #include "ftk.h"  
  2.   
  3. typedef struct _TimerInfo  
  4. {  
  5.     int times;  
  6.     FtkWidget* label;  
  7. }TimerInfo;  
  8.   
  9. static Ret timeout(void* ctx)  
  10. {  
  11.     TimerInfo* info = ctx;  
  12.     char buffer[32] = {0};  
  13.     if(info->times > 0)  
  14.     {  
  15.         snprintf(buffer, sizeof(buffer), "Quit after %d seconds", info->times);  
  16.         ftk_widget_set_text(info->label, buffer);  
  17.         info->times--;  
  18.   
  19.         return RET_OK;  
  20.     }  
  21.     else  
  22.     {  
  23.         ftk_quit();  
  24.         ftk_logd("%s: timeout and quit.\n", __func__);  
  25.       
  26.         return RET_REMOVE;  
  27.     }  
  28. }  
  29.   
  30. int main(int argc, char* argv[])  
  31. {  
  32.     int width = 0;  
  33.     int height = 0;  
  34.     FtkGc gc = {.mask = FTK_GC_BG};  
  35.     TimerInfo info = {.times=5, };  
  36.     ftk_init(argc, argv);  
  37.           
  38.     FtkSource* timer = ftk_source_timer_create(1000, timeout, &info);  
  39.     FtkWidget* win = ftk_app_window_create();  
  40.   
  41.     width = ftk_widget_width(win);  
  42.     height = ftk_widget_height(win);  
  43.   
  44.     FtkWidget* label = ftk_label_create(win, 10, 10, width - 20, 20);  
  45.     ftk_widget_set_text(label, "中文文本");  
  46.       
  47.     label = ftk_label_create(win, 10, 40, width - 20, 20);  
  48.     ftk_widget_set_text(label, "English Text");  
  49.     assert(strcmp(ftk_widget_get_text(label), "English Text") == 0);  
  50.       
  51.     gc.bg.a = 0xff;  
  52.     gc.bg.r = 0xF0;  
  53.     gc.bg.g = 0xF0;  
  54.     gc.bg.b = 0x80;  
  55.     label = ftk_label_create(win, 10, height/2, width - 20, 120);  
  56.     ftk_widget_set_gc(label, FTK_WIDGET_INSENSITIVE, &gc);  
  57.     ftk_widget_unset_attr(label, FTK_ATTR_TRANSPARENT);  
  58.     ftk_widget_set_text(label, "中英文混合多行文本显示:the linux mobile development.带有背景颜色。");  
  59.       
  60.     label = ftk_label_create(win, 50, height/2-30, width, 20);  
  61.     info.label = label;  
  62.       
  63.     ftk_widget_set_text(win, "label demo");  
  64.     ftk_widget_show_all(win, 1);  
  65.   
  66.     ftk_widget_set_attr(win, FTK_ATTR_IGNORE_CLOSE);  
  67.     ftk_main_loop_add_source(ftk_default_main_loop(), timer);  
  68.   
  69.     ftk_run();  
  70.   
  71.     return 0;  
  72. }  

  代码的内容,不是很多,大约有个70行左右。开始,同样首先初始化ftk,调用了ftk_init函数。在函数结尾的地方,代码也调用了ftk_run函数。这些都是代码的基本流程。只要你是用的是ftk,都需要遵守这个流程。中间的内容都是自己添加的。

 

    继续分析,我们观察一下,代码都做了些什么。细细想来,其实逻辑都差不多。依次往下看,代码创建了一个win控件,进而在win上插入了4个label控件。它们分别是中文文本、English Text、中英文混合多行文本显示、临时label。除此之外,代码中还出现了一个timer,每隔一段时间,它都会调用timeout这个函数。这个函数做了什么啊,从10行开始往下看。其实就是定时显示一段文字,告诉我们窗口离quit还有几秒。如果超时了呢,当然就会调用ftk_quit这个函数,ftk在释放完一些资源后就结束了。

 

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

【作者】 张昺华
【新浪微博】 张昺华--sky
【twitter】 @sky2030_
【facebook】 张昺华 zhangbinghua
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
目录
相关文章
|
Ubuntu
百度搜索:蓝易云【ubuntu下ntp时间同步教程】
现在,你的Ubuntu系统已经配置了NTP时间同步。它将自动与指定的NTP服务器保持时间同步。
189 0
|
开发框架 JavaScript 前端开发
描述JavaScript事件循环机制,并举例说明在游戏循环更新中的应用。
JavaScript的事件循环机制是单线程处理异步操作的关键,由调用栈、事件队列和Web APIs构成。调用栈执行函数,遇到异步操作时交给Web APIs,完成后回调函数进入事件队列。当调用栈空时,事件循环取队列中的任务执行。在游戏开发中,事件循环驱动游戏循环更新,包括输入处理、逻辑更新和渲染。示例代码展示了如何模拟游戏循环,实际开发中常用框架提供更高级别的抽象。
110 1
is not in the sudoers files的解决办法
is not in the sudoers files的解决办法
225 0
|
1天前
|
人工智能 运维 安全
|
3天前
|
SpringCloudAlibaba 负载均衡 Dubbo
微服务架构下Feign和Dubbo的性能大比拼,到底鹿死谁手?
本文对比分析了SpringCloudAlibaba框架下Feign与Dubbo的服务调用性能及差异。Feign基于HTTP协议,使用简单,适合轻量级微服务架构;Dubbo采用RPC通信,性能更优,支持丰富的服务治理功能。通过实际测试,Dubbo在调用性能、负载均衡和服务发现方面表现更出色。两者各有适用场景,可根据项目需求灵活选择。
371 123
微服务架构下Feign和Dubbo的性能大比拼,到底鹿死谁手?
|
6天前
|
人工智能 JavaScript 测试技术
Qwen3-Coder入门教程|10分钟搞定安装配置
Qwen3-Coder 挑战赛简介:无论你是编程小白还是办公达人,都能通过本教程快速上手 Qwen-Code CLI,利用 AI 轻松实现代码编写、文档处理等任务。内容涵盖 API 配置、CLI 安装及多种实用案例,助你提升效率,体验智能编码的乐趣。
581 107
|
2天前
|
Java 数据库 数据安全/隐私保护
Spring 微服务和多租户:处理多个客户端
本文介绍了如何在 Spring Boot 微服务架构中实现多租户。多租户允许单个应用实例为多个客户提供独立服务,尤其适用于 SaaS 应用。文章探讨了多租户的类型、优势与挑战,并详细说明了如何通过 Spring Boot 的灵活配置实现租户隔离、动态租户管理及数据源路由,同时确保数据安全与系统可扩展性。结合微服务的优势,开发者可以构建高效、可维护的多租户系统。
193 127
|
2天前
|
Web App开发 前端开发 API
在折叠屏应用中,如何处理不同屏幕尺寸和设备类型的样式兼容性?
在折叠屏应用中,如何处理不同屏幕尺寸和设备类型的样式兼容性?
222 124

热门文章

最新文章