最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言實現(xiàn)生成新春福字的示例詳解

 更新時間:2022年01月24日 08:27:20   作者:從善若水  
這篇文章主要介紹了如何利用C語言實現(xiàn)生成各個字體的新春福字,再也不用擔(dān)心支付寶掃福找不到圖片了,感興趣的同學(xué)可以跟隨小編學(xué)習(xí)一下

快新年了,支付寶掃?;顒佑珠_始了,每次都要百度找福,這次不想找了,自己寫一個程序生成各種字體的福字。

主要代碼

字面量以及數(shù)據(jù)結(jié)構(gòu)

#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 的總數(shù)
static int n_families=0;

//當(dāng)前正在使用的family 字體的索引
static int family_id=0;

// 記錄每個字體family中的face(字模)
static custom_PangoFontFace_t *custom_PangoFontFace;

定義一個回調(diào)函數(shù),刷新福字

static void
change_fu_cb(GtkButton *button , gpointer user_data)
{
    char *markup_fu_str = NULL;
    
    // 3*3 的矩陣中一共有9個福字,分別設(shè)置每個福字的字體
    for(int i=0;i<3;++i)
    {
        for(int j=0;j<3;++j)
        {
    		// 獲取當(dāng)前family中的下一個字模,如果當(dāng)前family中的字模都是用了,自動更新family_id 指向下一個family
            if(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);
        }
    }
}

應(yīng)用初始化程序

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);
    
    
    //獲取當(dāng)前系統(tǒng)中可用的字體 family
    PangoFontFamily **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 中可用的face
        pango_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);
            
            // 福字的背景圖,需要放在執(zhí)行程序所在的目錄
            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;
}

效果展示

到此這篇關(guān)于C語言實現(xiàn)生成新春福字的示例詳解的文章就介紹到這了,更多相關(guān)C語言生成福字內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++面試八股文之了解auto關(guān)鍵字

    C++面試八股文之了解auto關(guān)鍵字

    這篇文章主要為大家介紹了C++面試八股文之了解auto關(guān)鍵字問題解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • C++實現(xiàn)藍橋杯競賽題目---搭積木

    C++實現(xiàn)藍橋杯競賽題目---搭積木

    這篇文章主要介紹了C++實現(xiàn)藍橋杯競賽題目---搭積木,本篇文章通過題目分析列舉公式進行分析算法,包含詳細(xì)的圖文,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C++中main函數(shù)怎樣調(diào)用類內(nèi)函數(shù)

    C++中main函數(shù)怎樣調(diào)用類內(nèi)函數(shù)

    這篇文章主要介紹了C++中main函數(shù)怎樣調(diào)用類內(nèi)函數(shù)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • C++實現(xiàn)LeetCode(557.翻轉(zhuǎn)字符串中的單詞之三)

    C++實現(xiàn)LeetCode(557.翻轉(zhuǎn)字符串中的單詞之三)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(557.翻轉(zhuǎn)字符串中的單詞之三),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • VC小技巧匯總之5則實用小技巧

    VC小技巧匯總之5則實用小技巧

    這篇文章主要介紹了VC小技巧匯總之5則實用小技巧,需要的朋友可以參考下
    2014-07-07
  • 詳解C語言結(jié)構(gòu)體中的函數(shù)指針

    詳解C語言結(jié)構(gòu)體中的函數(shù)指針

    這篇文章主要介紹了詳解C語言結(jié)構(gòu)體中的函數(shù)指針,文中對函數(shù)指針的基本概念也有講解,需要的朋友可以參考下
    2016-04-04
  • C++時間函數(shù)整理詳解

    C++時間函數(shù)整理詳解

    C++中并沒有針對時間特意提供特定的時間類型,而是直接繼承了C語言的結(jié)構(gòu)以及函數(shù),因此在C++中使用時間函數(shù)需要引用<ctime>頭文件,這篇文章主要介紹了C++時間函數(shù)
    2022-10-10
  • vector與map的erase()函數(shù)詳細(xì)解析

    vector與map的erase()函數(shù)詳細(xì)解析

    vector和map都不能將it++寫在for循環(huán)中,而在循環(huán)體內(nèi)erase(it)
    2013-09-09
  • C++中浮點數(shù)、double類型如何與0值作比較詳解

    C++中浮點數(shù)、double類型如何與0值作比較詳解

    浮點數(shù)在內(nèi)存中的存儲機制和整型數(shù)不同,其有舍入誤差,在計算機中用近似表示任意某個實數(shù),這篇文章主要介紹了C++中浮點數(shù)、double類型如何與0值作比較的相關(guān)資料,需要的朋友可以參考下
    2025-03-03
  • OpenCV圖像處理之直方圖比較方法詳解

    OpenCV圖像處理之直方圖比較方法詳解

    直方圖比較是對輸入的兩張圖像進行計算得到直方圖H1與H2,歸一化到相同的尺度空間,然后可以通過計算H1與H2的之間的距離得到兩個直方圖的相似程度,進而比較圖像本身的相似程度。本文將為大家詳細(xì)講講直方圖比較的實現(xiàn)方法,需要的可以參考一下
    2022-09-09

最新評論

碌曲县| 拜泉县| 博乐市| 甘孜县| 宝山区| 乐陵市| 彰化县| 阜宁县| 东海县| 兴国县| 阳信县| 双牌县| 池州市| 准格尔旗| 青冈县| 遵化市| 舟山市| 晋城| 静宁县| 年辖:市辖区| 怀化市| 汤原县| 丰宁| 鄂尔多斯市| 镇雄县| 秭归县| 安平县| 荥经县| 崇文区| 永昌县| 龙游县| 遵义市| 开鲁县| 双牌县| 德令哈市| 桐梓县| 黑河市| 阳新县| 武山县| 锡林浩特市| 大同县|