• ftk学习记(label篇)【转】


    转自: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. ", __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在释放完一些资源后就结束了。

     

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

  • 相关阅读:
    [Panzura] identify user operations(copy, open, read ... ) in audit log
    Spark 学习
    Zeppelin 学习
    Delta Lake 学习
    传染病模型 SI
    xcodebuild和xcrun实现自动打包iOS应用程序
    控制UIlabel 垂直方向对齐方式的 方法
    ALAssetsLibrary
    CATransform3D
    AVFoundation的使用
  • 原文地址:https://www.cnblogs.com/sky-heaven/p/6803504.html
Copyright © 2020-2023  润新知