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几 ...
随机推荐
- ThinkPHP - 每个操作都检测用户是否登录
TP提供了一个自动执行的函数_initialize(), 你创建一个公共控制器CommonAction.class.php文件. 定义了此方法,不能存在构造方法__construct() <?p ...
- BZOJ 1004: [HNOI2008]Cards( 置换群 + burnside引理 + 背包dp + 乘法逆元 )
题意保证了是一个置换群. 根据burnside引理, 答案为Σc(f) / (M+1). c(f)表示置换f的不动点数, 而题目限制了颜色的数量, 所以还得满足题目, 用背包dp来计算.dp(x,i, ...
- 开源网络库的分析libev libevent nginx ....
最经看关于网络编程的一些书,对于网络编程中的一些基本东西,开源库已经封装的很好了,但是库归根结底还是使用的基本API,所以就想着分析一下,尤其是在看了各个库的介绍以后,所以这段时间想在这个方向投入一点 ...
- Mirantis OpenStack HA
Mysql使用Galera做Active/Active集群,同时使用Pacemaker,因为Galera mysql用到了领导机选举机制quorum,所以控制节点至少三个 RabbitMQ使用mirr ...
- CentOS6.5下VNC Server远程桌面配置详解
参考文献: (总结)CentOS Linux下VNC Server远程桌面配置详解 远程桌面连接工具VNC——license Key 我的下载地址为 太平洋下载 VNC连接黑屏的问题 centos 6 ...
- Chapter 4.开放-封闭原则
开放-封闭原则:是说软件实体应该可以扩展,但不可修改. 设计人员必须对于他设计的模块应该对哪种变化封闭做出选择,先猜测出最有可能发生的变化种类,然后构造抽象来隔离那些变化. 面对需求,对程序的改动是通 ...
- Maven创建项目: Failed to execute goal org.apache.maven.plugin( mvn archetype:create)
一.概述: 在使用mvn 命令mvn archetype:create -DgroupId=com.chuanliu.c11 -DartifactId=c11searcher在控制创建maven项目和 ...
- Python获取当地的天气和随意城市的天气
先从中国天气网得到数据('http://www.weather.com.cn/data/cityinfo/'+城市编码),每一个城市都有各自的编码,怎样得到用户所在地的城市编码呢?用一个网页就是专门干 ...
- Adobe Acrobat Ⅺ Pro安装激活
1.注意一定要断网安装,如果你有防火墙拦截亦可(注意:系统自带那防火墙不行). 2.将AcrobatPro_11_Web_WWMUI.exe解压到一个目录下,找到目录下的setup.exe安装,安装时 ...
- c# winform 弹出确认消息框判断是否删除?
if (MessageBox.Show("确认删除?", "此删除不可恢复", MessageBoxButtons.YesNo) == DialogResult ...