首页 > 其他分享 >ftk学习记(对话框篇)

ftk学习记(对话框篇)

时间:2022-11-23 12:04:07浏览次数:48  
标签:widget set 对话框 button 学习 width dialog ftk


    前面谈到了输入法,首先看一看效果。


ftk学习记(对话框篇)_回调函数


    上面有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,就是这么简单。


    效果图,下次见。




标签:widget,set,对话框,button,学习,width,dialog,ftk
From: https://blog.51cto.com/feixiaoxing/5880817

相关文章

  • ftk学习记(输入法篇)
      前面说的是全屏设置,还是请大家看一下效果图。  想看全屏效果的,可以单击一下左边的button。如果恢复到原来的结果呢,单击一下右边的button。  所以这个demo其实......
  • ftk学习记(窗口全屏设置篇)
         好久不写博客了,今天续上。但是,我们还是看一下上一期的运行结果,  上面窗口中有5个button,有机会的朋友可以编译、运行一把。  今天,我们的文章比较简单,也......
  • ftk学习记(消息框篇)
      上一篇说到了输入框。闲话不多说,首先看结果显示,  大家看看效果是不是和我们之前说的一样。今天,我们谈一下消息狂。这种消息框其实应用得特别多,有警告用的,有提问的......
  • ftk学习记(进度条篇)
      首先,在开始今天的文章之前,我们还是给朋友们展示一下前面一段代码的运行效果。效果如下,  有兴趣的朋友可以找到这段代码,看一下运行的效果如何。  今天,我们可以......
  • ftk学习记(button篇)
      前面,我们说到了label,这里可以看一下label运行的效果是怎么样的。  大家可以对照上面的结果图,看看我们之前的描述是否正确。  说完了label,可以看看button是怎......
  • ftk学习记(首篇)
        很早之前就知道ftk了,当时主要是因为买了李先静的书,所以知道了这么一个项目。因为对这种gui的代码很感兴趣,所以在我闲暇的时候也会拿来看一看。从整个工程来看,代码......
  • ftk学习记(label篇)
      还是接着上面的一篇博文。之前曾经答应过大家,让大家看一下最简单的ftk程序是怎么运行的。所以,这里我们上传一下图片。  因为还是编辑模式,所以暂时还不能看到图片......
  • MarkDown学习
    Markdown学习标题一级标题#+标题名二级标题##+标题名三级标题###+标题名字体正常字体Hello,World!Hello,World!文字两边加双星号为加粗字体Hello,World!......
  • unity学习笔记03-渲染管线
    图形数据在GPU上经过运算处理,最后显示在显示器上的过程游戏→图形API→cpu→(DRAWCALL)交给GPU→顶点处理→图元装配→光栅化→像素处理→缓存减少DRAWCALL 增加性能O......
  • 本人学习整理了-美妆类目完整直播话术框架流程➕话术提纲➕话术美妆类目完整直播话术
    本人当主播2年和运营1年,自己练习和整理的笔记分享详情内容,包括开场话术、活动话术、产品话术、品牌介绍、建立信任、优惠力度理由、促销、憋单技巧话术、互动话术、转款话......