ftk学习记(对话框篇)
【声明:版权全部,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
前面谈到了输入法,首先看一看效果。
上面有4个输入框,大家能够分别试试,看看效果怎样。
今天,我们要说的是对话框。直接看demo代码好了,
- #include "ftk.h"
- static Ret button_quit_clicked(void* ctx, void* obj)
- {
- if(ctx != NULL)
- {
- /*modal*/
- *(int*)ctx = ftk_widget_id(obj);
- }
- else
- {
- /*modal-less*/
- ftk_widget_unref(ftk_widget_toplevel(obj));
- }
- return RET_QUIT;
- }
- static Ret button_close_clicked(void* ctx, void* obj)
- {
- ftk_widget_unref(ctx);
- return RET_OK;
- }
- static Ret button_dialog_clicked(void* ctx, void* obj)
- {
- int id = 0;
- int width = 0;
- int height = 0;
- FtkWidget* label = NULL;
- FtkWidget* button = NULL;
- FtkWidget* dialog = NULL;
- FtkBitmap* icon = NULL;
- int modal = (int)ctx;
- ftk_logd("%s:%d begin\n", __func__, __LINE__);
- dialog = ftk_dialog_create(0, 40, 320, 240);
- icon = ftk_theme_load_image(ftk_default_theme(), "info-icon"FTK_STOCK_IMG_SUFFIX);
- ftk_dialog_set_icon(dialog, icon);
- width = ftk_widget_width(dialog);
- height = ftk_widget_height(dialog);
- label = ftk_label_create(dialog, width/6, height/4, 5*width/6, 20);
- ftk_widget_set_text(label, "Are you sure to quit?");
- button = ftk_button_create(dialog, width/6, height/2, width/3, 50);
- ftk_widget_set_text(button, "yes");
- ftk_button_set_clicked_listener(button, button_quit_clicked, modal ? &id : NULL);
- button = ftk_button_create(dialog, width/2, height/2, width/3, 50);
- ftk_widget_set_text(button, "no");
- ftk_button_set_clicked_listener(button, button_quit_clicked, modal ? &id : NULL);
- ftk_window_set_focus(dialog, button);
- ftk_widget_set_text(dialog, modal ? "model dialog" : "normal dialog");
- ftk_widget_show_all(dialog, 1);
- if(modal)
- {
- assert(ftk_dialog_run(dialog) == id);
- ftk_widget_unref(dialog);
- }
- else
- {
- ftk_widget_show_all(dialog, 1);
- }
- ftk_logd("%s:%d end\n", __func__, __LINE__);
- return RET_OK;
- }
- int main(int argc, char* argv[])
- {
- int width = 0;
- int height = 0;
- FtkWidget* win = NULL;
- FtkWidget* button = NULL;
- ftk_init(argc, argv);
- win = ftk_app_window_create();
- 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, "Normal");
- ftk_button_set_clicked_listener(button, button_dialog_clicked, NULL);
- button = ftk_button_create(win, 2*width/3, height/6, width/3, 50);
- ftk_widget_set_text(button, "Modal");
- ftk_button_set_clicked_listener(button, button_dialog_clicked, (void*)1);
- button = ftk_button_create(win, width/4, height/2, width/2, 60);
- ftk_widget_set_text(button, "quit");
- ftk_button_set_clicked_listener(button, button_close_clicked, win);
- ftk_widget_set_text(win, "demo dialog");
- ftk_widget_show_all(win, 1);
- ftk_widget_set_attr(win, FTK_ATTR_QUIT_WHEN_CLOSE);
- ftk_run();
- return 0;
- }
这段对话框的代码略微长一点,可是理解上没有难度。首先,main代码中创建了3个button。除了一个quit的button之外,其它两个button都是用来弹出对话框使用的,两个button的回调函数都是button_dialog_clicked。那么这当中又做了些什么呢?我们继续往下看,首先它会调用ftk_create_dialog创建一个对话框,然后用ftk_dialog_set_icon设置一下icon,接着依次创建了label和button,就是这样。怎样退出对话框呢?仅仅须要单击一下dialog中的button就可以,它会调用button_close_clicked函数,此时ftk_widget_unref会帮我们退出当前dialog,返回之前的windows,就是这么简单。
效果图,下次见。
ftk学习记(对话框篇)的更多相关文章
- ftk学习记(消息框篇)
[ 声明:版权全部,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 上一篇说到了输入框.闲话不多说,首先看结果显示, 大家看看效果是不是和我们之前说的一样.今天, ...
- ftk学习记(label篇)【转】
转自:http://blog.csdn.net/feixiaoxing/article/details/25000093 版权声明:本文为博主原创文章,未经博主允许不得转载. [ 声明:版权所有,欢迎 ...
- ftk学习记(label篇)
[ 声明:版权全部,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 还是接着上面的一篇博文. 之前以前答应过大家,让大家看一下最简单的ftk程序是怎么执行的.所以 ...
- ftk学习记(首篇)
[ 声明:版权全部,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 非常早之前就知道ftk了,当时主要是由于买了李先静的书,所以知道了这么一个项目.由于对这样的g ...
- ftk学习记(icon篇)
[声明:版权全部,欢迎转载.请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 在開始今天的文章之前.我们还是先看一下上一节的效果图. 大家能够參照上一节的解说,是不是存在这种 ...
- ftk学习记(滑动条篇)
[声明:版权全部,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 前一篇说到了combox.就先看一下效果吧. 说完了combox,就谈谈今天的滑动条.滑动条,当然 ...
- ftk学习记(输入框篇)
[ 声明:版权全部.欢迎转载.请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 昨天讲了进度条,我们还是看看它的运行效果是怎么样的.截图例如以下, 进度条使用的情况还是比較多的 ...
- ftk学习记(waitbox篇)
[声明:版权全部.欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 前面说到了脚本.那么就看看ftk中demo与script搭配的效果是什么样的? 上面的效果图就相 ...
- ftk学习记(list篇)
[声明:版权全部,欢迎转载.请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 在開始今天的list主题之前,先看一下icon的执行效果. 今天说的list事实上和这个icon几 ...
随机推荐
- if else配对问题
else语句总是与离它最近的if语句配对,所以在if语句的嵌套中一定要注意else语句与哪个if语句匹配 #include <iostream> using namespace std; ...
- enum型常量
就像结构体一样,定义一个枚举类型是不分配内存的,仅仅是定义了一个类型的名字,下面可以使用这个名字定义枚举类型的变量 枚举即将变量的值一一列举出来变量的值只限于列举出来的值得范围内 简单的应用如下 #i ...
- [Swust OJ 856]--Huge Tree(并查集)
题目链接:http://acm.swust.edu.cn/problem/856/ Time limit(ms): 1000 Memory limit(kb): 10000 Description T ...
- java.lang.NoClassDefFoundError: org.ksoap2.transport.HttpTransportSE异常处理
原因就是没有打包进去 因为引用进去 编译时没出出现问题 解决如下
- POJ 3047 Fibonacci
DEBUG很辛苦,且行, 且珍惜 原代码: ans[0][0] = (ans[0][0] * a[flag][0][0] + ans[0][1] * a[flag][1][0]) % 10000; a ...
- Android学习笔记:ListView简单应用--显示文字列表
在activity中的编写如下代码: final List<String> items = new ArrayList<String>(); //设置要显示的数据,这里因为是例 ...
- mybatis-redis项目分析
redis作为现在最优秀的key-value数据库,非常适合提供项目的缓存服务.把redis作为mybatis的查询缓存也是很常见的做法.在网上发现N多人是自己做的Cache,其实在mybatis的g ...
- redis(四)redis与Mybatis的无缝整合让MyBatis透明的管理缓存
redis的安装 http://liuyieyer.iteye.com/blog/2078093 redis的主从高可用 http://liuyieyer.iteye.com/blog/207809 ...
- 开源 免费 java CMS - FreeCMS1.9 职位管理
项目地址:http://code.google.com/p/freecms/ 职位管理 管理职位,实现招聘功能. 1. 职位管理 从左側管理菜单点击职位管理进入. 2. 加入职位 在职位列表下方点击& ...
- 使用ffmpeg将BMP图片编码为x264视频文件,将H264视频保存为BMP图片,yuv视频文件保存为图片的代码
ffmpeg开源库,实现将bmp格式的图片编码成x264文件,并将编码好的H264文件解码保存为BMP文件. 实现将视频文件yuv格式保存的图片格式的測试,图像格式png,jpg, gif等等測试均O ...