about_message.c

来自「经典的俄罗斯方块程序」· C语言 代码 · 共 151 行

C
151
字号
#include<gtk/gtk.h>#include"about_message.h"#include"main.h"extern GdkPixbuf* image;static MsgDInfo _drawinfo;static MsgDInfo* drawinfo=&_drawinfo;static gbooleanmsg_configure(GtkWidget* widget,              gpointer   data){    GtkWidget* pixmap;    drawinfo->gc=gdk_gc_new(widget->window);    drawinfo->pixmap=gdk_pixmap_new(widget->window,                                    330,180,-1);    pixmap=gdk_pixmap_new(widget->window,                          gdk_pixbuf_get_width(image),                          gdk_pixbuf_get_height(image),                          -1);        gdk_pixbuf_render_to_drawable(image,                                  pixmap,                                  drawinfo->gc,                                  0,0,0,0,                                  gdk_pixbuf_get_width(image),                                  gdk_pixbuf_get_height(image),                                  GDK_RGB_DITHER_NORMAL,                                  0,0);    gdk_draw_rectangle(drawinfo->pixmap,                       drawinfo->gc,                       TRUE,0,0,                       330,                       180);        gdk_draw_drawable(drawinfo->pixmap,                      drawinfo->gc,                      pixmap,                      30,0,120,30,                      30,30);    gdk_draw_drawable(drawinfo->pixmap,                      drawinfo->gc,                      pixmap,                      30,0,150,30,                      30,30);    gdk_draw_drawable(drawinfo->pixmap,                      drawinfo->gc,                      pixmap,                      30,0,180,30,                      30,30);    gdk_draw_drawable(drawinfo->pixmap,                      drawinfo->gc,                      pixmap,                      30,0,180,60,                      30,30);    gdk_draw_drawable(drawinfo->pixmap,                      drawinfo->gc,                      pixmap,                      60,0,150,90,                      30,30);    gdk_draw_drawable(drawinfo->pixmap,                      drawinfo->gc,                      pixmap,                      60,0,180,120,                      30,30);    gdk_draw_drawable(drawinfo->pixmap,                      drawinfo->gc,                      pixmap,                      60,0,150,120,                      30,30);    gdk_draw_drawable(drawinfo->pixmap,                      drawinfo->gc,                      pixmap,                      60,0,120,120,                      30,30);        gtk_widget_queue_draw(widget);        return TRUE;}static gbooleanmsg_expose(GtkWidget* widget,           gpointer   data){        gdk_draw_drawable(widget->window,                      drawinfo->gc,                      drawinfo->pixmap,                      0,0,0,0,                      widget->allocation.width,                      widget->allocation.height);        return TRUE;}voidshow_about_message(GtkWidget* widget,                   gpointer   data){    GtkWidget* dialog;    GtkWidget* label;    GtkWidget* canvas;    GtkWidget* pixbuf;    dialog=gtk_dialog_new_with_buttons(_("About message"),                                       GTK_WINDOW(data),                                       GTK_DIALOG_DESTROY_WITH_PARENT,                                       GTK_STOCK_OK,                                       GTK_RESPONSE_NONE,                                       NULL);    gtk_window_set_default_size(GTK_WINDOW(dialog),330,250);    gtk_window_set_resizable(GTK_WINDOW(dialog),FALSE);    canvas=gtk_drawing_area_new();   gtk_drawing_area_size(GTK_DRAWING_AREA(canvas),                         330,180);      gtk_signal_connect(GTK_OBJECT(canvas),                       "configure_event",                       GTK_SIGNAL_FUNC(msg_configure),                       drawinfo);   gtk_signal_connect(GTK_OBJECT(canvas),                      "expose_event",                      GTK_SIGNAL_FUNC(msg_expose),                      drawinfo);   gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox),                      canvas);   label=gtk_label_new(_("\nAuthor:Li Xujia.\n\n\Email:apmlove@gmail.com.\n"));       /* Ensure that the dialog box is destroyed when the user responds. */      g_signal_connect_swapped(dialog,                            "response",                            G_CALLBACK(gtk_widget_destroy),                            dialog);   gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox),                      label);      gtk_widget_show_all (dialog);}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?