GTK+2.0编程范例代码分析-第一章(1)

Gtk-ERROR : GTK+ 2.x symbols detected. Using GTK+2.x and GTK+3 in the same process is not support Gtk-ERROR **: GTK+ 2.x symbols detected. Using GTK+ 2.x and GTK+3 in the same process is not support报错:形式1:形式2:原因报错的一般复现解决方案参考文献 程序员遇到这种环境问题的时候前列腺都不好, 记录一下, 方便以后回查~ 报错: 报错有两种形式 形式1: Gtk-ERROR **: GTK+ 2.x symbols detected. Using GTK+ 2.x and GTK+3 in the 阅读详情

转载请注明:http://blog.youkuaiyun.com/hubbybob1/article/details/49159581
本文主要是针对 –GTK+2.0编程范例–宋国伟老师的书内的代码做一些注释,兼并讨论一下GTK+3.0与2.0的区别.其安装,在网上有很多讲解.
第1章 窗口与简单控件

1.1最简单的窗口
程序如下base.c

/*simple windows_base.c*/
#include <gtk/gtk.h>
int main(int argc,char*argv[])
{
    GtkWidget *window;//定义window控件
    gtk_init(&argc,&argv);//这句话是必须有的,初始化命令行参数

//创建window控件,参数GTK_WINDOW_TOPLEVEL:窗口类型,为最上层主窗口,GTK_WINDOW_TOPLEVEL:弹出式无边框窗口
    window=gtk_window_new(GTK_WINDOW_TOPLEVEL);

    gtk_widget_show(window);//创建后显示控件
    gtk_main();//这句话必须要,没有为什么,最关键,主事件循环
return 0;
}

下面是Makefile文件

CC=gcc
all:
    $(CC) -o base base.c `pkg-config --cflags --libs gtk+-2.0`

pkg-config –cflags –libs gtk+-2.0是指的向编译器指出包含文件的路径,动态链接库路径和要链接的动态链接库.此处的2.0可以换成3.0.执行make后运行base]文件如下:
这里写图片描述

1.2完善窗口功能
程序如下window.c

#include <gtk/gtk.h>
int main(int argc, char* argv[])
{
    GtkWidget *window;
    gtk_init(&argc,&argv);

    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);//GTK_WINDOW_POPUP创建窗口
    // g_signal_connect函数为glib函数包含四个参数
    //1:为链接的对象就是G_OBJECT,
    //2:信号名称,字符串形式,不同控件有不同信号,名称也不一样
    //3:回调函数,要使用G_CALLBACK来调用
    //4:传递个回调函数的参数,类型为gpointer,如果不是这个类型就强制转换,没有参数就是NULL
    //gtk_main_quit函数:退出主循环,就是借宿程序
    g_signal_connect(G_OBJECT(window),"delete_evernt",G_CALLBACK(gtk_main_quit),NULL);

    gtk_window_set_title(GTK_WINDOW(window),"一个完整的窗口");//设定窗口标题
    gtk_window_set_default_size(GTK_WINDOW(window),500,100);//设置窗口默认大小
    gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
      //设置窗口位置:
      //GTK_WIN_POS_CENTER        居中
      //GTK_WIN_POS_NONE          不固定
      //GTK_WIN_POS_MOUSE         出现在鼠标位置
      //GTK_WIN_POS_CENTER_ALWAYS 窗口改变尺寸仍然居中
      //GTK_WIN_POS_CENTER_PARENT 居于父窗口中部

    gtk_widget_show(window);
    gtk_main();

    return FALSE;
}

其Makefile为:

CC = gcc
all:
    $(CC) -o window window.c `pkg-config --cflags --libs gtk+-2.0`

运行window后得到
这里写图片描述

1.3hello程序
程序hello.c如下:

//hello.c
#include <gtk/gtk.h>
gint count = 1;
void on_button_click(GtkWidget *button, gpointer userdata)// GtkWidget *button, int *userdata
{
    g_print("你好,这是hello功能的测试");
    g_print("%d   %d\n",(gint)userdata,count);//添加了count项
    count = count + 1;
}
int main(int argc, char* argv[])
{
    GtkWidget *window;
    GtkWidget *button;
    gtk_init(&argc,&argv);
    //创建窗口
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
   g_signal_connect(G_OBJECT(window),"delete_event",G_CALLBACK(gtk_main_quit),NULL);//回调函数为gtk_main_quit
    gtk_window_set_title(GTK_WINDOW(window),"hello test");
    gtk_window_set_default_size(GTK_WINDOW(window),500,100);
    gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
    gtk_container_set_border_width(GTK_CONTAINER(window),60);
    //创建按钮
    button = gtk_button_new_with_label("按下此按钮会在终端显示信息");
   //为button添加一个回调函数为on_button_click,传入回调函数的参数为(gpointer)count
    g_signal_connect(G_OBJECT(button),"clicked",
                     G_CALLBACK(on_button_click),(gpointer)count);//(gpointer)count   (int)&(count) 
    gtk_container_add(GTK_CONTAINER(window),button);//把按钮加入窗口   

    gtk_widget_show(button);//显示按钮  ,这两个显示的顺序可以调换
    gtk_widget_show(window);//显示窗口
    gtk_main();

    return FALSE;

}//其Makefile如下:

CC = gcc
all:
    $(CC) -o hello hello.c `pkg-config --cflags --libs gtk+-2.0`

其显示的结果如下:
这里写图片描述
当按下按钮是产生的结果是,在终端打印出一下结果:
这里写图片描述
这个结果令我很失望,并不是书中所说的后面的回调函数执行后的值不断+1,而count却是不断加大的,这是为什么?我们来修改一些看看是什么样子:

/*把on_button_click回调函数修改为如下:参数gpointer userdata变为int *userdata*/
void on_button_click(GtkWidget *button, int *userdata)// GtkWidget *button, gpointer userdata
{    
    g_print("你好,这是hello功能的测试");
    i=*userdata;
    g_print("%d  %d\n",i,count);
    count = count + 1;
}

执行的结果为出现段错误:
这里写图片描述
那么继续修改主程序:


//g_signal_connect(G_OBJECT(button),"clicked",
//                 G_CALLBACK(on_button_click),(gpointer)count);//(gpointer)count   (gint)&(count)  
//把按钮回调函数修改为如下,把参数改为(gint)&(count)
  g_signal_connect(G_OBJECT(button),"clicked",
                   G_CALLBACK(on_button_click),(gint)&(count));//(gpointer)count   (gint)&(count)   

那么来编译一下,会出现如下提示:
这里写图片描述
就是说g_signal_connect的第四个参数需要gpointer指针,而我们传的却是int,但是没有报错,不管了直接运行,点击按钮看看结果如何:
这里写图片描述
可见无论是count的值,还是回调函数传过来的值都是变化的,那就改问了这是为什么呢,是BUG吗?,这个小编也不知道怎么回事,只能在以后的代码测试中来验证了.

1.4用盒状容器来排列按钮
程序pack.c如下:

/*容器主要包括:盒状容器(GtkBox),格状容器(GtkTable),按钮盒(GtkButtonBox),分割面板(GtkPanel),固定布局(GtkFixed),工具栏(GtkToolbar)等*/
/*用盒状容器排列按钮*/
#include <gtk/gtk.h>
int main(int argc,char* argv[])
{
    GtkWidget *window;
    GtkWidget *button;
    GtkWidget *box;//创建盒状容器
    gchar *title = "排列按钮";
    gtk_init(&argc,&argv);

    window =gtk_window_new(GTK_WINDOW_TOPLEVEL);//新建窗口
    g_signal_connect(G_OBJECT(window),"delete_event",G_CALLBACK(gtk_main_quit),NULL);
    gtk_window_set_title(GTK_WINDOW(window),title);//设置窗口标题
    gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);//设置窗口位置
    gtk_container_set_border_width(GTK_CONTAINER(window),20);

 //创建横向盒状容器
 //gtk_vbox_new(FALSE,0),这是创建竖向的,
 //第一个参数为是否均匀排放,FALSE:不均匀,有大有小,第二个参数表示容器中控件的间隔  
    box = gtk_hbox_new(FALSE,0);
    gtk_container_add(GTK_CONTAINER(window),box);//向window 内添加此容器
/**************************************************************
   1,把创建的button加入到容器内,可使用两种方法:使用gtk_container_add,但只能加1个控件,你可以下面的gtk_box_pack_start,换成gtk_box_pack_start,试试看,其实没什么变化,只是一些参数无法使用例如按钮间隔参数
   2,使用gtk_box_pack_*系列函数,这也有两种方法
      A.使用gtk_box_pack_start/gtk_box_pack_end,表示按顺序从前到后或者从后到前排列,含有5个参数
          容器GTK_BOX(box),
          控件对象指针button
          是否可扩展(就是横向是否可扩展,当横向拉大窗口时,其相对位置宽度都发生变化,当FASE就不变化,TRUE就变化)
          是否填充
          与前一控件的间隔
      B.使用gtk_box_pack_start_default/gtk_box_pack_end_default,只有两个参数,其他值都是默认
         但可以使用gtk_box_set_homogeneous/gtk_box_get_homogeneous设置/获得是否允许均匀排放
          可以使用gtk_box_set_spacing/gtk_box_get_spacing来设置/获得子空间之间的间隔
***************************************************************/
    button = gtk_button_new_with_label("按钮一");//创建button
    gtk_box_pack_start(GTK_BOX(box),button,TRUE,TRUE,3);
    //gtk_container_add(GTK_CONTAINER(box),button);

    button = gtk_button_new_with_label("按");
    gtk_box_pack_start(GTK_BOX(box),button,FALSE,FALSE,3);
   //gtk_container_add(GTK_CONTAINER(box),button);

    button = gtk_button_new_with_label("钮");
    gtk_box_pack_start(GTK_BOX(box),button,FALSE,FALSE,3);
    //gtk_container_add(GTK_CONTAINER(box),button);

    button = gtk_button_new_with_label("二");
   //gtk_container_add(GTK_CONTAINER(box),button);

    gtk_widget_show_all(window);//把六个gtk_widget_show()函数节省为1行,1个窗口,1个盒装容器,4个按钮
    gtk_main();
    return FALSE;
}//下面是Makefile
CC = gcc
all:
    $(CC) -o pack pack.c `pkg-config --cflags --libs gtk+-2.0`

这里写图片描述

1.5用格状容器来排列按钮
程序table.c如下:

/*格状容器 table.c*/
#include<gtk/gtk.h>
int main(int argc,char* argv[])
{
    GtkWidget * window;
    GtkWidget *table;
    GtkWidget *button;
    GtkWidget *frame;

    gtk_init(&argc,&argv);
  //创建窗口
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(GTK_WINDOW(window),"格状容器");
    gtk_window_set_default_size(GTK_WINDOW(window),200,300);
    g_signal_connect(G_OBJECT(window),"delete_event",G_CALLBACK(gtk_main_quit),NULL);
    gtk_container_set_border_width(GTK_CONTAINER(window),20);
//创建框架控件
    frame=gtk_frame_new("请注意下面的按钮排列");
    gtk_container_add(GTK_CONTAINER(window),frame);//把frame添加到window内
//创建格装容器
    table = gtk_table_new(4,4,FALSE);//创建4行4列,不允许均匀排放
    gtk_container_set_border_width(GTK_CONTAINER(table),10);//设置格状容器的边线宽度为10
    gtk_table_set_row_spacings(GTK_TABLE(table),5);//设定格状容器table中的控件行间隔5
    gtk_table_set_col_spacings(GTK_TABLE(table),5);//设定格状容器table中的控件列间隔5
//把格状容器添加到frame内
    gtk_container_add(GTK_CONTAINER(frame),table);
//gtk_table_attach,10个参数:格状容器,放入的控件,下面为table内的坐标比如1,3,1,3,就是横向1至3,和列向1至3
//后面四个为属性和间隔
//7,8参数为GtkAttachOptions,可取三个值:GTK_FILL可填充,GTK_EXPAND可扩展,GTK_SHRINK可缩放
//当然也可以使用gtk_table_attach_defaults函数只有4个参数,没有后面四个(属性和间隔)
    button = gtk_button_new_with_label("0,1,0,1");
    gtk_table_attach(GTK_TABLE(table),button,0,1,0,1,GTK_FILL,GTK_FILL,0,0);//0-1,0-1就是第一个格子

    button = gtk_button_new_with_label("1,3,1,3");
    gtk_table_attach(GTK_TABLE(table),button,1,3,1,3,GTK_FILL,GTK_FILL,0,0);//实际上是占了横向的第2和3的格子,纵向第2和3的格子

    button = gtk_button_new_with_label("0,1,1,3");
    gtk_table_attach(GTK_TABLE(table),button,0,1,1,3,GTK_FILL,GTK_FILL,0,0);//0-1,1-3

    button = gtk_button_new_with_label("1,3,0,1");
    gtk_table_attach_defaults(GTK_TABLE(table),button,1,3,0,1);//1-3,0-1

    button = gtk_button_new_with_label("0,4,3,4");
    gtk_table_attach_defaults(GTK_TABLE(table),button,0,4,3,4);//0-4,3-4

    button = gtk_button_new_with_label("3,4,0,3");
    gtk_table_attach_defaults(GTK_TABLE(table),button,3,4,0,3);//3-4,0-3
    gtk_widget_show_all(window);
    /***************************************************
        gtk_widget_show(window)
    for(i=0;i<4;i++)
       for(j=0;j<4;j++)
       {
          button = gtk_button_new();
          gtk_table_attach_defaults(GTK_TABLE(table),button,i,i+1,j,j+1);
          gtk_widget_show(button);
       }
   ********************************************************/
    gtk_main();
    return FALSE;
}//其Makefile文件为:

CC = gcc
all:
    $(CC) table.c -o table `pkg-config gtk+-2.0 --cflags --libs`

运行后的结果为:
这里写图片描述

Windows下通过Dev-C++配置GTK+3.0编程环境 目前本人在学习linux下的GTK+3.0,编好的程序很想移植到windows上使用,所以就到网上搜索了大量文章,其中VS2015和GTK+3.0组合方式始终无法调试成功,后来发现Dev-C++和GTK+3.0的组合方式勉强能用,现将细节说一下:一、软件准备 (一)使用系统windows7 64位。 (二)下载Dev-C++5.11,搜索官网https://dev-c.soft32.com/fre... 阅读详情

相关推荐

GTK+编程入门(2)—GTK+程序结构

GTK+编程入门(2)—GTK+程序结构(2015-7-23)分类:GTK+  现在是晚上,快到睡觉时间了。把这小节完整看完是不可能了,索性就先开个头。这节的内容是通过一个最简单的GTK+程序的分析来了解GTK+程序的基本结构。   该程序如下所示:#include <gtk/gtk.h> int main(int argc, char *argv[]) { //声明一个窗口构件

LazyBone1994的博客 1863

第133页的gtk+编程例子——计算器应用改写网上的例子用gtk4编译

第133页的gtk+编程例子——计算器应用改写网上的例子用gtk4编译

weixin_42145772的博客 465

Windows 11 安装GTK+3.0 和VScode开发GTK+3.0配置

windows11安装GTK+3.0及在VScode配置GTK+3.0开发环境,验证调试及运行GTK+3.0程序。

weixin_41738640的博客 1960

GTK+2.0编程范例代码分析-第一章(3)

转载请注明:http://blog.csdn.net/hubbybob1/article/details/49429067 本文主要是针对 GTK+2.0编程范例–宋国伟老师的书内的代码做一些注释,兼并讨论一下GTK+3.0与2.0的区别.其安装,在网上有很多讲解. 查看各个函数的的说明,就得看说明文档,下面这个网址很好,是GTK+3.0API的目录: https://developer.gn

hubbybob1专栏 1701

Win64 GTK+3编程【2】GTK+3完…

软件和包下载步骤: 首先是开发环境,选用Dev-cpp 5.11,下载地址:http://sourceforge.net/projects/orwelldevcpp/ 其次是GTK+3的打包文件,这里选择其首页的下载页的win64 bit页面,下载地址:all-in-one bundle   首先安装dev-cpp,安装过程跟以前一样。基本不需要什么繁琐的配置,第一次运行的时候会让用户选择主

flash胜龙的博客 2217

GTK+编程详细学习教程

通过本书学习你会对gtk编程有一个详细的了解 里面详细介绍了glib等gtk编程知识 不错的一本书,强力推荐大家看一看

GTK+2.0编程范例代码分析-第二章(1)

转载请注明:http://blog.csdn.net/hubbybob1/article/details/49466979 本文主要是针对 GTK+2.0编程范例–宋国伟老师的书内的代码做一些注释,兼并讨论一下GTK+3.0与2.0的区别.其安装,在网上有很多讲解. 查看各个函数的的说明,就得看说明文档,下面这个网址很好,是GTK+3.0API的目录: https://developer.gn

hubbybob1专栏 2675

GTK+2.0+中文教程.pdf

简介 GTK (GIMP Toolkit) 是一套用于创建图形用户界面的工具包。它遵循 LGPL 许可证,所以你可以用它来开发开源软件、自由软件,甚至是 封闭源代码的商业软件,而不用花费任何钱来购买许可证和使用权。 GTK 被称为 GIMP 工具包是因为最初写它是用来开发 GIMP (GNU 图像处理程序) 的,但是它现在已经被用于很多软件项目了,包括 GNOME (GNU 网络对象模型环境)。GTK 是在 GDK (GIMP Drawing Kit) 和 gdk-pixbuf 的基础上建立起来的,GDK 基本上是对访问窗口的 底层函数 (在 X 窗口系统中是 Xlib) 的一层封装,gdk-

GTK+2.0编程范例代码分析-第一章(2)

转载请注明:http://blog.csdn.net/hubbybob1/article/details/49248165 本文主要是针对 –GTK+2.0编程范例–宋国伟老师的书内的代码做一些注释,兼并讨论一下GTK+3.0与2.0的区别.其安装,在网上有很多讲解. 1.6带图像和快捷键的按钮 这一节是第四小结的延续,在源程序的基础上给窗口接一个背景,需要添加一个layout控件:程序如下:/

hubbybob1专栏 1361

GTK+2.0 中文版(基于GNOME官方文档翻译)

GTK+ 2.0 教程 译者: huzheng,konghui,ferry,carton,yang_yi,ddd,tingle 版本号: V_0.1.0 2002年 6 月25 日 本文是有关通过 C 语言接口使用 GTK (the GIMP Toolkit) 的教程。 Table of Contents 中文版说明 简介 从这里开始 用 GTK 来写 Hello World 编译 Hello World 程序 信号和回调函数的原理 事件 Hello World 详解 继续 数据类型 深入探索信号处理函数 改进了的 Hello World 组装构件 组装盒的原理 盒的细节 组装示范程序 用表组装 表组装示例 构件概述 类型转换 构件的组织 无窗口构件 按钮构件 一般按钮 Normal Buttons 开关按钮 Toggle Buttons 复选按钮 Check Buttons 单选按钮 Radio Buttons 调整对象 Adjustments 创建一个调整对象 轻松使用调整对象 “调整对象”的内部机制 范围构件 Range Widgets 滚动条构件 Scrollbar Widgets 比例构件 Scale Widgets 创建一个比例构件 函数和信号(至少讲了函数) 常用的范围函数 设置更新方式 获得和设置调整对象 键盘和鼠标绑定 示例 杂项构件 标签 Labels 箭头 Arrows 工具提示对象 The Tooltips Object 进度条 Progress Bars 对话框 Dialogs 标尺 Rulers 状态栏 Statusbars 文本输入构件 Text Entries 微调按钮 Spin Buttons 组合框 Combo Box 日历 Calendar 颜色选择 Color Selection 文件选择 File Selections 容器构件 Container Widgets 事件盒 The EventBox 对齐构件 The Alignment widget 固定容器 Fixed Container 布局容器 Layout Container 框架 Frames 比例框架 Aspect Frames 分栏窗口构件 Paned Window Widgets 视角 Viewports 滚动窗口 Scrolled Windows 按钮盒 Button Boxes 工具栏 Toolbar 笔记本 Notebooks 菜单构件 手工创建菜单 手工菜单示例 使用套件 套件示例 无文档构件 快捷标签 Accel Label 选项菜单 Option Menu 菜单项 Menu Items 复选菜单项 Check Menu Item 单选菜单项 Radio Menu Item 分隔菜单项 Separator Menu Item 分离菜单项 Tearoff Menu Item 曲线图 Curves 绘图区 Drawing Area 字体选择对话框 Font Selection Dialog 消息对话框 Message Dialog Gamma 曲线图 图像 Image 插头和插座 Plugs and Sockets 树视区 Tree View 文本视区 Text View 设置构件的属性 超时、IO 和 Idle 函数 超时 Timeouts 监控IO Idle 函数 高级事件和信号处理 信号函数 连接和断开信号处理函数 阻塞和反阻塞信号处理函数 发出和停止信号 信号的发射和传播 操作选中区 概述 获取选中区信息 提供选中区 拖放 概述 属性 函数 设置源构件 源构件上的信号 设置目的构件 目的构件上的信号 GLib 定义 双向链表 单向链表 存储管理 计时器 字符串处理 实用程序和错误处理函数 GTK 的 rc 文件 rc 文件的功能 GTK rc 文件的格式 rc 文件示例 编写你自己的构件 概述 一个构件的剖析 创建一个复合构件 介绍 选择一个父类 头文件 _get_type() 函数 _class_init() 函数 _init() 函数 其余的... 从头创建构件 介绍 在屏幕上显示构件 表盘构件的原形 主体 gtk_dial_realize() 大小磋商 gtk_dial_expose() 事件处理 可能的增强 深入的学习 涂鸦板,一个简单的绘图程序 概述 事件处理 绘图区构件和绘图 添加XInput支持 允许扩展设备信息 使用扩展设备信息 得到更多关于设备的信息 进一步的讲解 编写 GTK 应用程序的技巧 投稿 鸣谢 教程的版权和许可声明

GTK+2.0编程范例

一本范例,有大量的实例来讲解linux下GUI的编程技术。

GTK+-2.0 的安装

声明:本文是自己昨天安装GTK+-2.0的经历,完全是安装下面步骤来的,现记录下来,方便以后查看。 本机系统是Ubuntu10.04。vim&gcc&gdb&make&kg-config等基本编程工具都已经安装完毕。 Ubuntu 上开发gtk+2.0的程序,需要安装相应的头文件和库。 1、在控制台窗口输入sudo apt-get install libgtk2.0*,

嵌入式学习交流平台 7815

《GTK+2.0编程范例》配套示例代码 1.1 最简单的窗口

《GTK+2.0编程范例》配套示例代码 1.1 最简单的窗口

GTK+3.0相较与GTK+2.0下创建盒的变化

在学习使用Glade软件创建盒的过程中,发现GTK+3.0已经取消了gtk_hbox_new()和gtk_vbox_new(),只需要在常规选项里面修改横向和垂直即可。但为了弄懂GTK+3.0与GTK+3.0的不同,还是查阅了一些资源,主要区别如下: 一、GTK+2.0 横向盒gtk_hbox_new(gboolean homogeneous,gint spacing); 纵向盒gtk_vb...

qq_43037374的博客 2359

GTK2.0编程范例源码

GTK2.0编程范例源码,其中提供代码的详细解释,对学GTK很有帮助

GTK+2.0编程范例.doc

DOC文档方便代码编写 提供健全的GTK编写指南,是代码新手的福音

CentOS 6.0中安装GTK+2.0

在使用GTK+进行GUI编程之前,必须要先安装上GTK+。下面介绍CentOS 6.0中安装GTK2.0的过程。 1、打开任意一个终端,在里面输入: yum install gtk+*  ,然后回车,安装过程中选择“Y”; 2、随便写个程序: #include #include void hello(GtkWidget *widget,gpointer data) { g_p

tifire_xh的专栏 1167

GTK+-2.0-中文手册.pdf.7z

GTK+_2.0_中文手册.pdf.7z

上一篇: 集成VIM强大的代码编辑器(一)
下一篇: GTK+2.0编程范例代码分析-第一章(2)
葫芦娃二娃
博客等级 码龄15年 1850粉丝 69原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值