博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持!
博主链接

文章目录

  • C语言生成新春福字
    • 字面量以及数据结构
    • 定义一个回调函数,刷新福字
    • 应用初始化程序
    • 主程序
  • 效果展示

C语言生成新春福字


快新年了,支付宝扫福活动又开始了,每次都要百度找福,这次不想找了,自己写一个程序生成各种字体的福字。

示例程序下载

字面量以及数据结构

#define FONT_DISPLAY "福"// g_fu_label中的每一个控件都是一个福字
static GtkWidget *g_fu_label[3][3];// 记录所有的字体family
typedef struct {int n_faces;PangoFontFace **faces;
}custom_PangoFontFace_t;//字体family 的总数
static int n_families=0;//当前正在使用的family 字体的索引
static int family_id=0;// 记录每个字体family中的face(字模)
static custom_PangoFontFace_t *custom_PangoFontFace;

定义一个回调函数,刷新福字

static void
change_fu_cb(GtkButton *button , gpointer user_data)
{char *markup_fu_str = NULL;// 3*3 的矩阵中一共有9个福字,分别设置每个福字的字体for(int i=0;i<3;++i){for(int j=0;j<3;++j){// 获取当前family中的下一个字模,如果当前family中的字模都是用了,自动更新family_id 指向下一个familyif(family_id >= n_families) family_id=0;if(++face_id >= custom_PangoFontFace[family_id].n_faces){++family_id;if(family_id >= n_families)family_id=0;face_id = 0;}markup_fu_str = g_markup_printf_escaped("<span font-weight=\"Bold\" font_desc=\"%s 99\">%s</span>",pango_font_description_to_string(pango_font_face_describe(custom_PangoFontFace[family_id].faces[0])),FONT_DISPLAY);gtk_label_set_markup(GTK_LABEL(g_fu_label[i][j]),markup_fu_str);g_free(markup_fu_str);}}
}

应用初始化程序

static void
activate (GtkApplication* app,gpointer user_data)
{GtkWidget *window;GtkWidget *mainGrid;GtkWidget *overlay;GtkWidget *picture;GtkCssProvider *cssProvider;const char *cssMainGrid = "grid {background-color:#ed3c43;}";const char *cssButton = "* {background-color:#FF0000;}";PangoFontMap *pangoFontMap;GtkWidget *box;GtkWidget *button;window = gtk_application_window_new (app);gtk_window_set_title (GTK_WINDOW (window), "");gtk_window_set_default_size (GTK_WINDOW (window), 900, 900);mainGrid = gtk_grid_new();gtk_widget_set_hexpand(mainGrid,TRUE);gtk_widget_set_vexpand(mainGrid,TRUE);box = gtk_box_new(GTK_ORIENTATION_VERTICAL,0);gtk_widget_set_hexpand(box,TRUE);gtk_widget_set_vexpand(box,TRUE);gtk_box_append(GTK_BOX(box),mainGrid);button = gtk_button_new_with_label("换一批");gtk_widget_set_hexpand(button,TRUE);gtk_widget_set_vexpand(button,TRUE);cssProvider = gtk_css_provider_new();gtk_css_provider_load_from_data(GTK_CSS_PROVIDER(cssProvider),cssButton,-1);gtk_style_context_add_provider(gtk_widget_get_style_context(button),GTK_STYLE_PROVIDER(cssProvider),GTK_STYLE_PROVIDER_PRIORITY_USER);gtk_style_context_add_provider(gtk_widget_get_style_context(gtk_widget_get_first_child(button)),GTK_STYLE_PROVIDER(cssProvider),GTK_STYLE_PROVIDER_PRIORITY_USER);g_object_unref(cssProvider);g_signal_connect(button,"clicked",G_CALLBACK(change_fu_cb),NULL);gtk_box_append(GTK_BOX(box),button);gtk_window_set_child(GTK_WINDOW(window),box);cssProvider = gtk_css_provider_new();gtk_css_provider_load_from_data(GTK_CSS_PROVIDER(cssProvider),cssMainGrid,-1);gtk_style_context_add_provider(gtk_widget_get_style_context(mainGrid),GTK_STYLE_PROVIDER(cssProvider),GTK_STYLE_PROVIDER_PRIORITY_USER);g_object_unref(cssProvider);//获取当前系统中可用的字体 familyPangoFontFamily **families;pangoFontMap = pango_cairo_font_map_get_default();pango_font_map_list_families(pangoFontMap,&families,&n_families);custom_PangoFontFace = (custom_PangoFontFace_t *)g_malloc0(n_families*sizeof(custom_PangoFontFace_t));for(int i=0;i<n_families;++i){//获取每个字体 family 中可用的facepango_font_family_list_faces(families[i],&custom_PangoFontFace[i].faces,&custom_PangoFontFace[i].n_faces);}g_free(families);// 初始化每个福字控件for(int i=0;i<3;++i){for(int j=0;j<3;++j){overlay = gtk_overlay_new();gtk_widget_set_hexpand(overlay,TRUE);gtk_widget_set_vexpand(overlay,TRUE);// 福字的背景图,需要放在执行程序所在的目录picture = gtk_picture_new_for_filename("./fu.png");gtk_widget_set_hexpand(picture,TRUE);gtk_widget_set_vexpand(picture,TRUE);g_fu_label[i][j] = gtk_label_new("");gtk_widget_set_hexpand(g_fu_label[i][j],TRUE);gtk_widget_set_vexpand(g_fu_label[i][j],TRUE);gtk_overlay_set_child(GTK_OVERLAY(overlay),picture);gtk_overlay_add_overlay(GTK_OVERLAY(overlay),g_fu_label[i][j]);gtk_grid_attach(GTK_GRID(mainGrid),overlay,i,j,1,1);}}//初始化福字change_fu_cb(GTK_BUTTON(button) , NULL);gtk_window_set_resizable(GTK_WINDOW(window),FALSE);gtk_widget_show (window);
}

主程序

int
main(int argc, char *argv[])
{GtkApplication *app;int status;app = gtk_application_new ("org.gtk.example", G_APPLICATION_FLAGS_NONE);g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);status = g_application_run (G_APPLICATION (app), argc, argv);g_object_unref (app);//释放资源for(int i=0;i<n_families;++i){g_free(custom_PangoFontFace[i].faces);}g_free(custom_PangoFontFace);return status;
}

效果展示


这里是从善若水的博客,感谢您的阅读

【GTK4】C语言生成新春福字相关推荐

  1. @微信官方,给我微信旁边加个福字

    最近打开微信 总能看到一些好友的昵称后面带了个"福"字 还有人在朋友圈@微信团队 要"福"字 好家伙,机智如我,能上这当嘛~ 发朋友圈是要不来"福&q ...

  2. 福字背景|传统中国风国潮设计必备素材!

    新年季福字传统中国风主题背景 福字传统中国风节日必备背景底纹素材,万字福字.新年快乐,素材很新年,可以从小年一直用到元宵的哦:PSD模板素材,适合用于各种题材的版式设计. 福字背景中国红国潮 传统中国 ...

  3. 《英雄联盟》出现大面积闪退;两名 95 后大学生用脑电波写“福”字;Windows蓝屏为什么是蓝底白字? | 极客头条...

    「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 丁恩华 出品 | CSDN(ID:CSDNnews ...

  4. 从“扫月亮”到“扫福字”,扒一扒背后的支付宝AR框架体系

    摘要:从攒五福到抢红包,全国人民的春节活动越来越多样,其背后技术挑战也更复杂:业务层挑战与实现方案.AR红包支付架构变化.技术难点和攻克手段.优化细节和保障方法.安全风险和攻防实战等,每一年的红包背后 ...

  5. 四年级下册计算机技术做福字,四年级写福字作文

    一年级的云朵上,住着一只小鸟.小鸟就要飞到二年级的云朵上,和一年级的云朵告别. 一年级的大树上,住着一只猴子.猴子准备跳到二年级的大树上,和一年级的大树告别. 一年级的花儿上,住着一只蝴蝶.蝴蝶即将飞 ...

  6. Word2013制作中国的传统福字在屋门上贴的福字(福倒了)

    家家户户都要在屋门上.墙壁上.门楣上贴上大大小小的"福"字,这是每逢新春佳节必做的一件事,这是我国民间由来已久的风俗,据<梦梁录>记载:"岁旦在迩,席铺百货, ...

  7. python tkinter画福字

    目录 前言 一.创建画布 二.绘制福字的外框 三.绘制"福"字 前言 这不今天是除夕了,祝大家除夕快乐哈!今天我来教大家一个有趣的东西,用Tkinter(有turtle我就是不用, ...

  8. 7-62 贴“福”字

    7-62 贴"福"字 请编写程序,输出"福"字. 输入样例 注:无输入. 输出样例 * ** * * * * * * * * *** * * * * * * * ...

  9. 2920集五福_2019支付宝集五福字新玩法,高概率出敬业福攻略。

    还是熟悉的配方,还是熟悉的味道.今天(2019年1月25日)凌晨,集五福活动正式开启,支付宝客户端首页也更新了大大的"集五福"入口.据介绍,今年的支付宝集五福活动将保留了去年几乎被 ...

最新文章

  1. composer安装laravel框架时未生成Vendor解决办法
  2. hibernate中merge/attachDirty/attachClean
  3. pip安装了 但是python找不到_python安装完毕后,用pip安装提示找不到ssl模块怎么解决?...
  4. asp.net core监控—引入Prometheus(二)
  5. MFC基于对话框的商场交易软件实现
  6. pytorch 矩阵相乘_深度学习 — — PyTorch入门(三)
  7. java网页解析包_java 网页解析工具包 Jsoup
  8. STM32之I2C原理
  9. php提供的魔术常量
  10. 使用Movavi Photo Editor如何修复照片中的红眼
  11. 金蝶星空支持mysql吗_金蝶云星空K3 CLOUD SQL 数据库优化
  12. 树莓派怎么切换输入法_为树莓派安装Fcitx和谷歌拼音中文输入法
  13. 我们雇佣了一只大猴子...
  14. 管理科学与运筹学(MS/OR)国际期刊最新权威排名
  15. 时空跳跃者的追捕行动解题报告
  16. C语言实现简单的航空订票、退票系统
  17. 2020上半年数据分析人才及CDA持证人行业报告
  18. 这所北京计算机类大学,改考408了!北京信息科技大学
  19. 速度来!《软技能:代码之外的生存指南 (第2版)》送书4本
  20. 创造与魔法游戏最新的服务器,创造与魔法MOD服务器

热门文章

  1. vanilla_如何使用Vanilla JavaScript构建钢琴键盘
  2. vue 点击切换导航标签,并左右滚动
  3. 导柱导向机构设计的注意事项
  4. phpstorm优雅的格式化php代码
  5. 联想s920Android5.0,联想手机s920官网
  6. MATLAB二维图动画视频制作
  7. 跟我学Elasticsearch(1) 什么是Elasticsearch
  8. 小程序服务器布置云端费用,程序员的小目标:从云端搭建一个小程序开始
  9. 【号外】支付宝提现开始收费,真相只有一个!
  10. 计算机转魔方最快多少,转魔方最快纪录是多少